<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Interactive BOM for KiCAD</title>
  <style type="text/css">
:root {
  --pcb-edge-color: black;
  --pad-color: #878787;
  --pad-color-highlight: #D04040;
  --pin1-outline-color: #ffb629;
  --pin1-outline-color-highlight: #b4ff03;
  --silkscreen-edge-color: #aa4;
  --silkscreen-polygon-color: #4aa;
  --silkscreen-text-color: #4aa;
  --fabrication-edge-color: #907651;
  --fabrication-polygon-color: #907651;
  --fabrication-text-color: #a27c24;
  --track-color: #def5f1;
  --track-color-highlight: #D04040;
  --zone-color: #def5f1;
  --zone-color-highlight: #d0404080;
}

html, body {
  margin: 0px;
  height: 100%;
  font-family: Verdana, sans-serif;
}

.dark.topmostdiv {
  --pcb-edge-color: #eee;
  --pad-color: #808080;
  --pin1-outline-color: #ffa800;
  --pin1-outline-color-highlight: #ccff00;
  --track-color: #42524f;
  --zone-color: #42524f;
  background-color: #252c30;
  color: #eee;
}

button {
  background-color: #eee;
  border: 1px solid #888;
  color: black;
  height: 44px;
  width: 44px;
  text-align: center;
  text-decoration: none;
  display: inline-block;
  font-size: 14px;
  font-weight: bolder;
}

.dark button {
  /* This will be inverted */
  background-color: #c3b7b5;
}

button.depressed {
  background-color: #0a0;
  color: white;
}

.dark button.depressed {
  /* This will be inverted */
  background-color: #b3b;
}

button:focus {
  outline: 0;
}

button#tb-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.32 290.12h5.82M1.32 291.45h5.82' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 292.5v4.23M.26 292.63H8.2' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='1.35' y='295.73'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A");
}

button#lr-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.06 290.12H3.7m-2.64 1.33H3.7m-2.64 1.32H3.7m-2.64 1.3H3.7m-2.64 1.33H3.7' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 288.8v7.94m0-4.11h3.96' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='5.11' y='291.96'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A");
}

button#bom-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)' fill='none' stroke='%23000' stroke-width='.4'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' stroke-linejoin='round'/%3E%3Cpath d='M1.59 290.12h5.29M1.59 291.45h5.33M1.59 292.75h5.33M1.59 294.09h5.33M1.59 295.41h5.33'/%3E%3C/g%3E%3C/svg%3E");
}

button#bom-grouped-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m4 0h5m4 0h3M6.1 22h3m3.9 0h5m4 0h4m-16-8h4m4 0h4'/%3E%3Cpath stroke-linecap='null' d='M5 17.5h22M5 26.6h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E");
}

button#bom-ungrouped-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m-4 8h3m-3 8h4'/%3E%3Cpath stroke-linecap='null' d='M5 13.5h22m-22 8h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E");
}

button#bom-netlist-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg fill='none' stroke='%23000' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-width='2' d='M6 26l6-6v-8m13.8-6.3l-6 6v8'/%3E%3Ccircle cx='11.8' cy='9.5' r='2.8' stroke-width='2'/%3E%3Ccircle cx='19.8' cy='22.8' r='2.8' stroke-width='2'/%3E%3C/g%3E%3C/svg%3E");
}

button#copy {
  background-image: url("data:image/svg+xml,%3Csvg height='48' viewBox='0 0 48 48' width='48' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h48v48h-48z' fill='none'/%3E%3Cpath d='M32 2h-24c-2.21 0-4 1.79-4 4v28h4v-28h24v-4zm6 8h-22c-2.21 0-4 1.79-4 4v28c0 2.21 1.79 4 4 4h22c2.21 0 4-1.79 4-4v-28c0-2.21-1.79-4-4-4zm0 32h-22v-28h22v28z'/%3E%3C/svg%3E");
  background-position: 6px 6px;
  background-repeat: no-repeat;
  background-size: 26px 26px;
  border-radius: 6px;
  height: 40px;
  width: 40px;
  margin: 10px 5px;
}

button#copy:active {
    box-shadow: inset 0px 0px 5px #6c6c6c;
}

textarea.clipboard-temp {
  position: fixed;
  top: 0;
  left: 0;
  width: 2em;
  height: 2em;
  padding: 0;
  border: None;
  outline: None;
  box-shadow: None;
  background: transparent;
}

.left-most-button {
  border-right: 0;
  border-top-left-radius: 6px;
  border-bottom-left-radius: 6px;
}

.middle-button {
  border-right: 0;
}

.right-most-button {
  border-top-right-radius: 6px;
  border-bottom-right-radius: 6px;
}

.button-container {
  font-size: 0;
  margin: 10px 10px 10px 0px;
}

.dark .button-container {
  filter: invert(1);
}

.button-container button {
  background-size: 32px 32px;
  background-position: 5px 5px;
  background-repeat: no-repeat;
}

@media print {
  .hideonprint {
    display: none;
  }
}

canvas {
  cursor: crosshair;
}

canvas:active {
  cursor: grabbing;
}

.fileinfo {
  width: 100%;
  max-width: 1000px;
  border: none;
  padding: 5px;
}

.fileinfo .title {
  font-size: 20pt;
  font-weight: bold;
}

.fileinfo td {
  overflow: hidden;
  white-space: nowrap;
  max-width: 1px;
  width: 50%;
  text-overflow: ellipsis;
}

.bom {
  border-collapse: collapse;
  font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
  font-size: 10pt;
  table-layout: fixed;
  width: 100%;
  margin-top: 1px;
}

.bom th, .bom td {
  border: 1px solid black;
  padding: 5px;
  word-wrap: break-word;
  text-align: center;
  position: relative;
}

.dark .bom th, .dark .bom td {
  border: 1px solid #777;
}

.bom th {
  background-color: #CCCCCC;
  background-clip: padding-box;
}

.dark .bom th {
  background-color: #3b4749;
}

.bom tr.highlighted:nth-child(n) {
  background-color: #cfc;
}

.dark .bom tr.highlighted:nth-child(n) {
  background-color: #226022;
}

.bom tr:nth-child(even) {
  background-color: #f2f2f2;
}

.dark .bom tr:nth-child(even) {
  background-color: #313b40;
}

.bom tr {
  transition: background-color 0.2s;
}

.bom .numCol {
  width: 25px;
}

.bom .Description {
  width: 10%;
}

.bom .Part {
  width: 10%;
}

.bom .Value {
  width: 15%;
}

.bom .Quantity {
  width: 65px;
}

.bom th .sortmark {
  position: absolute;
  right: 1px;
  top: 1px;
  margin-top: -5px;
  border-width: 5px;
  border-style: solid;
  border-color: transparent transparent #221 transparent;
  transform-origin: 50% 85%;
  transition: opacity 0.2s, transform 0.4s;
}

.dark .bom th .sortmark {
  filter: invert(1);
}

.bom th .sortmark.none {
  opacity: 0;
}

.bom th .sortmark.desc {
  transform: rotate(180deg);
}

.bom th:hover .sortmark.none {
  opacity: 0.5;
}

.bom .bom-checkbox {
  width: 30px;
  position: relative;
  user-select: none;
  -moz-user-select: none;
}

.bom .bom-checkbox:before {
  content: "";
  position: absolute;
  border-width: 15px;
  border-style: solid;
  border-color: #51829f transparent transparent transparent;
  visibility: hidden;
  top: -15px;
}

.bom .bom-checkbox:after {
  content: "Double click to set/unset all";
  position: absolute;
  color: white;
  top: -35px;
  left: -26px;
  background: #51829f;
  padding: 5px 15px;
  border-radius: 8px;
  white-space: nowrap;
  visibility: hidden;
}

.bom .bom-checkbox:hover:before, .bom .bom-checkbox:hover:after {
  visibility: visible;
  transition: visibility 0.2s linear 1s;
}

.split {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  overflow-y: auto;
  overflow-x: hidden;
  background-color: inherit;
}

.split.split-horizontal, .gutter.gutter-horizontal {
  height: 100%;
  float: left;
}

.gutter {
  background-color: #ddd;
  background-repeat: no-repeat;
  background-position: 50%;
  transition: background-color 0.3s;
}

.dark .gutter {
  background-color: #777;
}

.gutter.gutter-horizontal {
  background-image: url('');
  cursor: ew-resize;
  width: 5px;
}

.gutter.gutter-vertical {
  background-image: url('');
  cursor: ns-resize;
  height: 5px;
}

.searchbox {
  float: left;
  height: 40px;
  margin: 10px 5px;
  padding: 12px 32px;
  font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
  font-size: 18px;
  box-sizing: border-box;
  border: 1px solid #888;
  border-radius: 6px;
  outline: none;
  background-color: #eee;
  transition: background-color 0.2s, border 0.2s;
  background-image: url('');
  background-position: 10px 10px;
  background-repeat: no-repeat;
}

.dark .searchbox {
  background-color: #111;
  color: #eee;
}

.searchbox::placeholder {
  color: #ccc;
}

.dark .searchbox::placeholder {
  color: #666;
}

.filter {
  width: calc(60% - 64px);
}

.reflookup {
  width: calc(40% - 10px);
}

input[type=text]:focus {
  background-color: white;
  border: 1px solid #333;
}

.dark input[type=text]:focus {
  background-color: #333;
  border: 1px solid #ccc;
}

mark.highlight {
  background-color: #5050ff;
  color: #fff;
  padding: 2px;
  border-radius: 6px;
}

.dark mark.highlight {
  background-color: #76a6da;
  color: #111;
}

.menubtn {
  background-color: white;
  border: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='36' viewBox='0 0 20 20'%3E%3Cpath fill='none' d='M0 0h20v20H0V0z'/%3E%3Cpath d='M15.95 10.78c.03-.25.05-.51.05-.78s-.02-.53-.06-.78l1.69-1.32c.15-.12.19-.34.1-.51l-1.6-2.77c-.1-.18-.31-.24-.49-.18l-1.99.8c-.42-.32-.86-.58-1.35-.78L12 2.34c-.03-.2-.2-.34-.4-.34H8.4c-.2 0-.36.14-.39.34l-.3 2.12c-.49.2-.94.47-1.35.78l-1.99-.8c-.18-.07-.39 0-.49.18l-1.6 2.77c-.1.18-.06.39.1.51l1.69 1.32c-.04.25-.07.52-.07.78s.02.53.06.78L2.37 12.1c-.15.12-.19.34-.1.51l1.6 2.77c.1.18.31.24.49.18l1.99-.8c.42.32.86.58 1.35.78l.3 2.12c.04.2.2.34.4.34h3.2c.2 0 .37-.14.39-.34l.3-2.12c.49-.2.94-.47 1.35-.78l1.99.8c.18.07.39 0 .49-.18l1.6-2.77c.1-.18.06-.39-.1-.51l-1.67-1.32zM10 13c-1.65 0-3-1.35-3-3s1.35-3 3-3 3 1.35 3 3-1.35 3-3 3z'/%3E%3C/svg%3E%0A");
  background-position: center;
  background-repeat: no-repeat;
}

.statsbtn {
  background-color: white;
  border: none;
  background-image: url("data:image/svg+xml,%3Csvg width='36' height='36' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 6h28v24H4V6zm0 8h28v8H4m9-16v24h10V5.8' fill='none' stroke='%23000' stroke-width='2'/%3E%3C/svg%3E");
  background-position: center;
  background-repeat: no-repeat;
}

.iobtn {
  background-color: white;
  border: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='36'%3E%3Cpath fill='none' stroke='%23000' stroke-width='2' d='M3 33v-7l6.8-7h16.5l6.7 7v7H3zM3.2 26H33M21 9l5-5.9 5 6h-2.5V15h-5V9H21zm-4.9 0l-5 6-5-6h2.5V3h5v6h2.5z'/%3E%3Cpath fill='none' stroke='%23000' d='M6.1 29.5H10'/%3E%3C/svg%3E");
  background-position: center;
  background-repeat: no-repeat;
}

.dark .statsbtn, .dark .savebtn, .dark .menubtn, .dark .iobtn {
  filter: invert(1);
}

.flexbox {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
}

.savebtn {
  background-color: #d6d6d6;
  width: auto;
  height: 30px;
  flex-grow: 1;
  margin: 5px;
  border-radius: 4px;
}

.savebtn:active {
  background-color: #0a0;
  color: white;
}

.dark .savebtn:active {
  /* This will be inverted */
  background-color: #b3b;
}

.stats {
  border-collapse: collapse;
  font-size: 12pt;
  table-layout: fixed;
  width: 100%;
  min-width: 450px;
}

.dark .stats td {
  border: 1px solid #bbb;
}

.stats td {
  border: 1px solid black;
  padding: 5px;
  word-wrap: break-word;
  text-align: center;
  position: relative;
}

#checkbox-stats div {
  position: absolute;
  left: 0;
  top: 0;
  height: 100%;
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}

#checkbox-stats .bar {
  background-color: rgba(28, 251, 0, 0.6);
}

.menu {
  position: relative;
  display: inline-block;
  margin: 10px 10px 10px 0px;
}

.menu-content {
  display: none;
  position: absolute;
  background-color: white;
  right: 0;
  min-width: 300px;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
  z-index: 100;
  padding: 8px;
}

.dark .menu-content {
  background-color: #111;
}

.menu:hover .menu-content {
  display: block;
}

.menu:hover .menubtn, .menu:hover .iobtn, .menu:hover .statsbtn {
  background-color: #eee;
}

.menu-label {
  display: inline-block;
  padding: 8px;
  border: 1px solid #ccc;
  border-top: 0;
  width: calc(100% - 18px);
}

.menu-label-top {
  border-top: 1px solid #ccc;
}

.menu-textbox {
  float: left;
  height: 24px;
  margin: 10px 5px;
  padding: 5px 5px;
  font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
  font-size: 14px;
  box-sizing: border-box;
  border: 1px solid #888;
  border-radius: 4px;
  outline: none;
  background-color: #eee;
  transition: background-color 0.2s, border 0.2s;
  width: calc(100% - 10px);
}

.menu-textbox.invalid, .dark .menu-textbox.invalid {
  color: red;
}

.dark .menu-textbox {
  background-color: #222;
  color: #eee;
}

.topmostdiv {
  width: 100%;
  height: 100%;
  background-color: white;
  transition: background-color 0.3s;
}

#top {
  height: 78px;
  border-bottom: 2px solid black;
}

.dark #top {
  border-bottom: 2px solid #ccc;
}

#dbg {
  display: block;
}

::-webkit-scrollbar {
  width: 8px;
}

::-webkit-scrollbar-track {
  background: #aaa;
}

::-webkit-scrollbar-thumb {
  background: #666;
  border-radius: 3px;
}

::-webkit-scrollbar-thumb:hover {
  background: #555;
}

.slider {
  -webkit-appearance: none;
  width: 100%;
  margin: 3px 0;
  padding: 0;
  outline: none;
  opacity: 0.7;
  -webkit-transition: .2s;
  transition: opacity .2s;
  border-radius: 3px;
}

.slider:hover {
  opacity: 1;
}

.slider:focus {
  outline: none;
}

.slider::-webkit-slider-runnable-track {
  -webkit-appearance: none;
  width: 100%;
  height: 8px;
  background: #d3d3d3;
  border-radius: 3px;
  border: none;
}

.slider::-webkit-slider-thumb {
  -webkit-appearance: none;
  width: 15px;
  height: 15px;
  border-radius: 50%;
  background: #0a0;
  cursor: pointer;
  margin-top: -4px;
}

.dark .slider::-webkit-slider-thumb {
  background: #3d3;
}

.slider::-moz-range-thumb {
  width: 15px;
  height: 15px;
  border-radius: 50%;
  background: #0a0;
  cursor: pointer;
}

.slider::-moz-range-track {
  height: 8px;
  background: #d3d3d3;
  border-radius: 3px;
}

.dark .slider::-moz-range-thumb {
  background: #3d3;
}

.slider::-ms-track {
  width: 100%;
  height: 8px;
  border-width: 3px 0;
  background: transparent;
  border-color: transparent;
  color: transparent;
  transition: opacity .2s;
}

.slider::-ms-fill-lower {
  background: #d3d3d3;
  border: none;
  border-radius: 3px;
}

.slider::-ms-fill-upper {
  background: #d3d3d3;
  border: none;
  border-radius: 3px;
}

.slider::-ms-thumb {
  width: 15px;
  height: 15px;
  border-radius: 50%;
  background: #0a0;
  cursor: pointer;
  margin: 0;
}

.shameless-plug {
  font-size: 0.8em;
  text-align: center;
  display: block;
}

a {
  color: #0278a4;
}

.dark a {
  color: #00b9fd;
}

#frontcanvas, #backcanvas {
    touch-action: none;
}

  </style>
  <script type="text/javascript" >
///////////////////////////////////////////////
/*
  Split.js - v1.3.5
  MIT License
  https://github.com/nathancahill/Split.js
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Split=t()}(this,function(){"use strict";var e=window,t=e.document,n="addEventListener",i="removeEventListener",r="getBoundingClientRect",s=function(){return!1},o=e.attachEvent&&!e[n],a=["","-webkit-","-moz-","-o-"].filter(function(e){var n=t.createElement("div");return n.style.cssText="width:"+e+"calc(9px)",!!n.style.length}).shift()+"calc",l=function(e){return"string"==typeof e||e instanceof String?t.querySelector(e):e};return function(u,c){function z(e,t,n){var i=A(y,t,n);Object.keys(i).forEach(function(t){return e.style[t]=i[t]})}function h(e,t){var n=B(y,t);Object.keys(n).forEach(function(t){return e.style[t]=n[t]})}function f(e){var t=E[this.a],n=E[this.b],i=t.size+n.size;t.size=e/this.size*i,n.size=i-e/this.size*i,z(t.element,t.size,this.aGutterSize),z(n.element,n.size,this.bGutterSize)}function m(e){var t;this.dragging&&((t="touches"in e?e.touches[0][b]-this.start:e[b]-this.start)<=E[this.a].minSize+M+this.aGutterSize?t=E[this.a].minSize+this.aGutterSize:t>=this.size-(E[this.b].minSize+M+this.bGutterSize)&&(t=this.size-(E[this.b].minSize+this.bGutterSize)),f.call(this,t),c.onDrag&&c.onDrag())}function g(){var e=E[this.a].element,t=E[this.b].element;this.size=e[r]()[y]+t[r]()[y]+this.aGutterSize+this.bGutterSize,this.start=e[r]()[G]}function d(){var t=this,n=E[t.a].element,r=E[t.b].element;t.dragging&&c.onDragEnd&&c.onDragEnd(),t.dragging=!1,e[i]("mouseup",t.stop),e[i]("touchend",t.stop),e[i]("touchcancel",t.stop),t.parent[i]("mousemove",t.move),t.parent[i]("touchmove",t.move),delete t.stop,delete t.move,n[i]("selectstart",s),n[i]("dragstart",s),r[i]("selectstart",s),r[i]("dragstart",s),n.style.userSelect="",n.style.webkitUserSelect="",n.style.MozUserSelect="",n.style.pointerEvents="",r.style.userSelect="",r.style.webkitUserSelect="",r.style.MozUserSelect="",r.style.pointerEvents="",t.gutter.style.cursor="",t.parent.style.cursor=""}function S(t){var i=this,r=E[i.a].element,o=E[i.b].element;!i.dragging&&c.onDragStart&&c.onDragStart(),t.preventDefault(),i.dragging=!0,i.move=m.bind(i),i.stop=d.bind(i),e[n]("mouseup",i.stop),e[n]("touchend",i.stop),e[n]("touchcancel",i.stop),i.parent[n]("mousemove",i.move),i.parent[n]("touchmove",i.move),r[n]("selectstart",s),r[n]("dragstart",s),o[n]("selectstart",s),o[n]("dragstart",s),r.style.userSelect="none",r.style.webkitUserSelect="none",r.style.MozUserSelect="none",r.style.pointerEvents="none",o.style.userSelect="none",o.style.webkitUserSelect="none",o.style.MozUserSelect="none",o.style.pointerEvents="none",i.gutter.style.cursor=j,i.parent.style.cursor=j,g.call(i)}function v(e){e.forEach(function(t,n){if(n>0){var i=F[n-1],r=E[i.a],s=E[i.b];r.size=e[n-1],s.size=t,z(r.element,r.size,i.aGutterSize),z(s.element,s.size,i.bGutterSize)}})}function p(){F.forEach(function(e){e.parent.removeChild(e.gutter),E[e.a].element.style[y]="",E[e.b].element.style[y]=""})}void 0===c&&(c={});var y,b,G,E,w=l(u[0]).parentNode,D=e.getComputedStyle(w).flexDirection,U=c.sizes||u.map(function(){return 100/u.length}),k=void 0!==c.minSize?c.minSize:100,x=Array.isArray(k)?k:u.map(function(){return k}),L=void 0!==c.gutterSize?c.gutterSize:10,M=void 0!==c.snapOffset?c.snapOffset:30,O=c.direction||"horizontal",j=c.cursor||("horizontal"===O?"ew-resize":"ns-resize"),C=c.gutter||function(e,n){var i=t.createElement("div");return i.className="gutter gutter-"+n,i},A=c.elementStyle||function(e,t,n){var i={};return"string"==typeof t||t instanceof String?i[e]=t:i[e]=o?t+"%":a+"("+t+"% - "+n+"px)",i},B=c.gutterStyle||function(e,t){return n={},n[e]=t+"px",n;var n};"horizontal"===O?(y="width","clientWidth",b="clientX",G="left","paddingLeft"):"vertical"===O&&(y="height","clientHeight",b="clientY",G="top","paddingTop");var F=[];return E=u.map(function(e,t){var i,s={element:l(e),size:U[t],minSize:x[t]};if(t>0&&(i={a:t-1,b:t,dragging:!1,isFirst:1===t,isLast:t===u.length-1,direction:O,parent:w},i.aGutterSize=L,i.bGutterSize=L,i.isFirst&&(i.aGutterSize=L/2),i.isLast&&(i.bGutterSize=L/2),"row-reverse"===D||"column-reverse"===D)){var a=i.a;i.a=i.b,i.b=a}if(!o&&t>0){var c=C(t,O);h(c,L),c[n]("mousedown",S.bind(i)),c[n]("touchstart",S.bind(i)),w.insertBefore(c,s.element),i.gutter=c}0===t||t===u.length-1?z(s.element,s.size,L/2):z(s.element,s.size,L);var f=s.element[r]()[y];return f<s.minSize&&(s.minSize=f),t>0&&F.push(i),s}),o?{setSizes:v,destroy:p}:{setSizes:v,getSizes:function(){return E.map(function(e){return e.size})},collapse:function(e){if(e===F.length){var t=F[e-1];g.call(t),o||f.call(t,t.size-t.bGutterSize)}else{var n=F[e];g.call(n),o||f.call(n,n.aGutterSize)}},destroy:p}}});

///////////////////////////////////////////////

///////////////////////////////////////////////
// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>
// This work is free. You can redistribute it and/or modify it
// under the terms of the WTFPL, Version 2
// For more information see LICENSE.txt or http://www.wtfpl.net/
//
// For more information, the home page:
// http://pieroxy.net/blog/pages/lz-string/testing.html
//
// LZ-based compression algorithm, version 1.4.4
var LZString=function(){var o=String.fromCharCode,i={};var n={decompressFromBase64:function(o){return null==o?"":""==o?null:n._decompress(o.length,32,function(n){return function(o,n){if(!i[o]){i[o]={};for(var t=0;t<o.length;t++)i[o][o.charAt(t)]=t}return i[o][n]}("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o.charAt(n))})},_decompress:function(i,n,t){var r,e,a,s,p,u,l,f=[],c=4,d=4,h=3,v="",g=[],m={val:t(0),position:n,index:1};for(r=0;r<3;r+=1)f[r]=r;for(a=0,p=Math.pow(2,2),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 2:return""}for(f[3]=l,e=l,g.push(l);;){if(m.index>i)return"";for(a=0,p=Math.pow(2,h),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(l=a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 2:return g.join("")}if(0==c&&(c=Math.pow(2,h),h++),f[l])v=f[l];else{if(l!==d)return null;v=e+e.charAt(0)}g.push(v),f[d++]=e+v.charAt(0),e=v,0==--c&&(c=Math.pow(2,h),h++)}}};return n}();"function"==typeof define&&define.amd?define(function(){return LZString}):"undefined"!=typeof module&&null!=module?module.exports=LZString:"undefined"!=typeof angular&&null!=angular&&angular.module("LZString",[]).factory("LZString",function(){return LZString});
///////////////////////////////////////////////

///////////////////////////////////////////////
/*!
 * PEP v0.4.3 | https://github.com/jquery/PEP
 * Copyright jQuery Foundation and other contributors | http://jquery.org/license
 */
!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.PointerEventsPolyfill=b()}(this,function(){"use strict";function a(a,b){b=b||Object.create(null);var c=document.createEvent("Event");c.initEvent(a,b.bubbles||!1,b.cancelable||!1);
for(var d,e=2;e<m.length;e++)d=m[e],c[d]=b[d]||n[e];c.buttons=b.buttons||0;
var f=0;return f=b.pressure&&c.buttons?b.pressure:c.buttons?.5:0,c.x=c.clientX,c.y=c.clientY,c.pointerId=b.pointerId||0,c.width=b.width||0,c.height=b.height||0,c.pressure=f,c.tiltX=b.tiltX||0,c.tiltY=b.tiltY||0,c.twist=b.twist||0,c.tangentialPressure=b.tangentialPressure||0,c.pointerType=b.pointerType||"",c.hwTimestamp=b.hwTimestamp||0,c.isPrimary=b.isPrimary||!1,c}function b(){this.array=[],this.size=0}function c(a,b,c,d){this.addCallback=a.bind(d),this.removeCallback=b.bind(d),this.changedCallback=c.bind(d),A&&(this.observer=new A(this.mutationWatcher.bind(this)))}function d(a){return"body /shadow-deep/ "+e(a)}function e(a){return'[touch-action="'+a+'"]'}function f(a){return"{ -ms-touch-action: "+a+"; touch-action: "+a+"; }"}function g(){if(F){D.forEach(function(a){String(a)===a?(E+=e(a)+f(a)+"\n",G&&(E+=d(a)+f(a)+"\n")):(E+=a.selectors.map(e)+f(a.rule)+"\n",G&&(E+=a.selectors.map(d)+f(a.rule)+"\n"))});var a=document.createElement("style");a.textContent=E,document.head.appendChild(a)}}function h(){if(!window.PointerEvent){if(window.PointerEvent=a,window.navigator.msPointerEnabled){var b=window.navigator.msMaxTouchPoints;Object.defineProperty(window.navigator,"maxTouchPoints",{value:b,enumerable:!0}),u.registerSource("ms",_)}else Object.defineProperty(window.navigator,"maxTouchPoints",{value:0,enumerable:!0}),u.registerSource("mouse",N),void 0!==window.ontouchstart&&u.registerSource("touch",V);u.register(document)}}function i(a){if(!u.pointermap.has(a)){var b=new Error("InvalidPointerId");throw b.name="InvalidPointerId",b}}function j(a){for(var b=a.parentNode;b&&b!==a.ownerDocument;)b=b.parentNode;if(!b){var c=new Error("InvalidStateError");throw c.name="InvalidStateError",c}}function k(a){var b=u.pointermap.get(a);return 0!==b.buttons}function l(){window.Element&&!Element.prototype.setPointerCapture&&Object.defineProperties(Element.prototype,{setPointerCapture:{value:W},releasePointerCapture:{value:X},hasPointerCapture:{value:Y}})}
var m=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","pageX","pageY"],n=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0],o=window.Map&&window.Map.prototype.forEach,p=o?Map:b;b.prototype={set:function(a,b){return void 0===b?this["delete"](a):(this.has(a)||this.size++,void(this.array[a]=b))},has:function(a){return void 0!==this.array[a]},"delete":function(a){this.has(a)&&(delete this.array[a],this.size--)},get:function(a){return this.array[a]},clear:function(){this.array.length=0,this.size=0},forEach:function(a,b){return this.array.forEach(function(c,d){a.call(b,c,d,this)},this)}};var q=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","buttons","pointerId","width","height","pressure","tiltX","tiltY","pointerType","hwTimestamp","isPrimary","type","target","currentTarget","which","pageX","pageY","timeStamp"],r=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0,0,0,0,0,0,"",0,!1,"",null,null,0,0,0,0],s={pointerover:1,pointerout:1,pointerenter:1,pointerleave:1},t="undefined"!=typeof SVGElementInstance,u={pointermap:new p,eventMap:Object.create(null),captureInfo:Object.create(null),eventSources:Object.create(null),eventSourceList:[],registerSource:function(a,b){var c=b,d=c.events;d&&(d.forEach(function(a){c[a]&&(this.eventMap[a]=c[a].bind(c))},this),this.eventSources[a]=c,this.eventSourceList.push(c))},register:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
b.register.call(b,a)},unregister:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
b.unregister.call(b,a)},contains:function(a,b){try{return a.contains(b)}catch(c){return!1}},down:function(a){a.bubbles=!0,this.fireEvent("pointerdown",a)},move:function(a){a.bubbles=!0,this.fireEvent("pointermove",a)},up:function(a){a.bubbles=!0,this.fireEvent("pointerup",a)},enter:function(a){a.bubbles=!1,this.fireEvent("pointerenter",a)},leave:function(a){a.bubbles=!1,this.fireEvent("pointerleave",a)},over:function(a){a.bubbles=!0,this.fireEvent("pointerover",a)},out:function(a){a.bubbles=!0,this.fireEvent("pointerout",a)},cancel:function(a){a.bubbles=!0,this.fireEvent("pointercancel",a)},leaveOut:function(a){this.out(a),this.propagate(a,this.leave,!1)},enterOver:function(a){this.over(a),this.propagate(a,this.enter,!0)},eventHandler:function(a){if(!a._handledByPE){var b=a.type,c=this.eventMap&&this.eventMap[b];c&&c(a),a._handledByPE=!0}},listen:function(a,b){b.forEach(function(b){this.addEvent(a,b)},this)},unlisten:function(a,b){b.forEach(function(b){this.removeEvent(a,b)},this)},addEvent:function(a,b){a.addEventListener(b,this.boundHandler)},removeEvent:function(a,b){a.removeEventListener(b,this.boundHandler)},makeEvent:function(b,c){this.captureInfo[c.pointerId]&&(c.relatedTarget=null);var d=new a(b,c);return c.preventDefault&&(d.preventDefault=c.preventDefault),d._target=d._target||c.target,d},fireEvent:function(a,b){var c=this.makeEvent(a,b);return this.dispatchEvent(c)},cloneEvent:function(a){for(var b,c=Object.create(null),d=0;d<q.length;d++)b=q[d],c[b]=a[b]||r[d],!t||"target"!==b&&"relatedTarget"!==b||c[b]instanceof SVGElementInstance&&(c[b]=c[b].correspondingUseElement);return a.preventDefault&&(c.preventDefault=function(){a.preventDefault()}),c},getTarget:function(a){var b=this.captureInfo[a.pointerId];return b?a._target!==b&&a.type in s?void 0:b:a._target},propagate:function(a,b,c){for(var d=a.target,e=[];d!==document&&!d.contains(a.relatedTarget);) if(e.push(d),d=d.parentNode,!d)return;c&&e.reverse(),e.forEach(function(c){a.target=c,b.call(this,a)},this)},setCapture:function(b,c,d){this.captureInfo[b]&&this.releaseCapture(b,d),this.captureInfo[b]=c,this.implicitRelease=this.releaseCapture.bind(this,b,d),document.addEventListener("pointerup",this.implicitRelease),document.addEventListener("pointercancel",this.implicitRelease);var e=new a("gotpointercapture");e.pointerId=b,e._target=c,d||this.asyncDispatchEvent(e)},releaseCapture:function(b,c){var d=this.captureInfo[b];if(d){this.captureInfo[b]=void 0,document.removeEventListener("pointerup",this.implicitRelease),document.removeEventListener("pointercancel",this.implicitRelease);var e=new a("lostpointercapture");e.pointerId=b,e._target=d,c||this.asyncDispatchEvent(e)}},dispatchEvent:/*scope.external.dispatchEvent || */function(a){var b=this.getTarget(a);if(b)return b.dispatchEvent(a)},asyncDispatchEvent:function(a){requestAnimationFrame(this.dispatchEvent.bind(this,a))}};u.boundHandler=u.eventHandler.bind(u);var v={shadow:function(a){if(a)return a.shadowRoot||a.webkitShadowRoot},canTarget:function(a){return a&&Boolean(a.elementFromPoint)},targetingShadow:function(a){var b=this.shadow(a);if(this.canTarget(b))return b},olderShadow:function(a){var b=a.olderShadowRoot;if(!b){var c=a.querySelector("shadow");c&&(b=c.olderShadowRoot)}return b},allShadows:function(a){for(var b=[],c=this.shadow(a);c;)b.push(c),c=this.olderShadow(c);return b},searchRoot:function(a,b,c){if(a){var d,e,f=a.elementFromPoint(b,c);for(e=this.targetingShadow(f);e;){if(d=e.elementFromPoint(b,c)){var g=this.targetingShadow(d);return this.searchRoot(g,b,c)||d} e=this.olderShadow(e)} return f}},owner:function(a){
for(var b=a;b.parentNode;)b=b.parentNode;
return b.nodeType!==Node.DOCUMENT_NODE&&b.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&(b=document),b},findTarget:function(a){var b=a.clientX,c=a.clientY,d=this.owner(a.target);
return d.elementFromPoint(b,c)||(d=document),this.searchRoot(d,b,c)}},w=Array.prototype.forEach.call.bind(Array.prototype.forEach),x=Array.prototype.map.call.bind(Array.prototype.map),y=Array.prototype.slice.call.bind(Array.prototype.slice),z=Array.prototype.filter.call.bind(Array.prototype.filter),A=window.MutationObserver||window.WebKitMutationObserver,B="[touch-action]",C={subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,attributeFilter:["touch-action"]};c.prototype={watchSubtree:function(a){
//
this.observer&&v.canTarget(a)&&this.observer.observe(a,C)},enableOnSubtree:function(a){this.watchSubtree(a),a===document&&"complete"!==document.readyState?this.installOnLoad():this.installNewSubtree(a)},installNewSubtree:function(a){w(this.findElements(a),this.addElement,this)},findElements:function(a){return a.querySelectorAll?a.querySelectorAll(B):[]},removeElement:function(a){this.removeCallback(a)},addElement:function(a){this.addCallback(a)},elementChanged:function(a,b){this.changedCallback(a,b)},concatLists:function(a,b){return a.concat(y(b))},
installOnLoad:function(){document.addEventListener("readystatechange",function(){"complete"===document.readyState&&this.installNewSubtree(document)}.bind(this))},isElement:function(a){return a.nodeType===Node.ELEMENT_NODE},flattenMutationTree:function(a){
var b=x(a,this.findElements,this);
return b.push(z(a,this.isElement)),b.reduce(this.concatLists,[])},mutationWatcher:function(a){a.forEach(this.mutationHandler,this)},mutationHandler:function(a){if("childList"===a.type){var b=this.flattenMutationTree(a.addedNodes);b.forEach(this.addElement,this);var c=this.flattenMutationTree(a.removedNodes);c.forEach(this.removeElement,this)}else"attributes"===a.type&&this.elementChanged(a.target,a.oldValue)}};var D=["none","auto","pan-x","pan-y",{rule:"pan-x pan-y",selectors:["pan-x pan-y","pan-y pan-x"]}],E="",F=window.PointerEvent||window.MSPointerEvent,G=!window.ShadowDOMPolyfill&&document.head.createShadowRoot,H=u.pointermap,I=25,J=[1,4,2,8,16],K=!1;try{K=1===new MouseEvent("test",{buttons:1}).buttons}catch(L){}
var M,N={POINTER_ID:1,POINTER_TYPE:"mouse",events:["mousedown","mousemove","mouseup","mouseover","mouseout"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},lastTouches:[],
isEventSimulatedFromTouch:function(a){for(var b,c=this.lastTouches,d=a.clientX,e=a.clientY,f=0,g=c.length;f<g&&(b=c[f]);f++){
var h=Math.abs(d-b.x),i=Math.abs(e-b.y);if(h<=I&&i<=I)return!0}},prepareEvent:function(a){var b=u.cloneEvent(a),c=b.preventDefault;return b.preventDefault=function(){a.preventDefault(),c()},b.pointerId=this.POINTER_ID,b.isPrimary=!0,b.pointerType=this.POINTER_TYPE,b},prepareButtonsForMove:function(a,b){var c=H.get(this.POINTER_ID);
0!==b.which&&c?a.buttons=c.buttons:a.buttons=0,b.buttons=a.buttons},mousedown:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);K||(c.buttons=J[c.button],b&&(c.buttons|=b.buttons),a.buttons=c.buttons),H.set(this.POINTER_ID,a),b&&0!==b.buttons?u.move(c):u.down(c)}},mousemove:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.move(b)}},mouseup:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);if(!K){var d=J[c.button];
c.buttons=b?b.buttons&~d:0,a.buttons=c.buttons}H.set(this.POINTER_ID,a),
c.buttons&=~J[c.button],0===c.buttons?u.up(c):u.move(c)}},mouseover:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.enterOver(b)}},mouseout:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,u.leaveOut(b)}},cancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.deactivateMouse()},deactivateMouse:function(){H["delete"](this.POINTER_ID)}},O=u.captureInfo,P=v.findTarget.bind(v),Q=v.allShadows.bind(v),R=u.pointermap,S=2500,T=200,U="touch-action",V={events:["touchstart","touchmove","touchend","touchcancel"],register:function(a){M.enableOnSubtree(a)},unregister:function(){},elementAdded:function(a){var b=a.getAttribute(U),c=this.touchActionToScrollType(b);c&&(a._scrollType=c,u.listen(a,this.events),
Q(a).forEach(function(a){a._scrollType=c,u.listen(a,this.events)},this))},elementRemoved:function(a){a._scrollType=void 0,u.unlisten(a,this.events),
Q(a).forEach(function(a){a._scrollType=void 0,u.unlisten(a,this.events)},this)},elementChanged:function(a,b){var c=a.getAttribute(U),d=this.touchActionToScrollType(c),e=this.touchActionToScrollType(b);
d&&e?(a._scrollType=d,Q(a).forEach(function(a){a._scrollType=d},this)):e?this.elementRemoved(a):d&&this.elementAdded(a)},scrollTypes:{EMITTER:"none",XSCROLLER:"pan-x",YSCROLLER:"pan-y",SCROLLER:/^(?:pan-x pan-y)|(?:pan-y pan-x)|auto$/},touchActionToScrollType:function(a){var b=a,c=this.scrollTypes;return"none"===b?"none":b===c.XSCROLLER?"X":b===c.YSCROLLER?"Y":c.SCROLLER.exec(b)?"XY":void 0},POINTER_TYPE:"touch",firstTouch:null,isPrimaryTouch:function(a){return this.firstTouch===a.identifier},setPrimaryTouch:function(a){
(0===R.size||1===R.size&&R.has(1))&&(this.firstTouch=a.identifier,this.firstXY={X:a.clientX,Y:a.clientY},this.scrolling=!1,this.cancelResetClickCount())},removePrimaryPointer:function(a){a.isPrimary&&(this.firstTouch=null,this.firstXY=null,this.resetClickCount())},clickCount:0,resetId:null,resetClickCount:function(){var a=function(){this.clickCount=0,this.resetId=null}.bind(this);this.resetId=setTimeout(a,T)},cancelResetClickCount:function(){this.resetId&&clearTimeout(this.resetId)},typeToButtons:function(a){var b=0;return"touchstart"!==a&&"touchmove"!==a||(b=1),b},touchToPointer:function(a){var b=this.currentTouchEvent,c=u.cloneEvent(a),d=c.pointerId=a.identifier+2;c.target=O[d]||P(c),c.bubbles=!0,c.cancelable=!0,c.detail=this.clickCount,c.button=0,c.buttons=this.typeToButtons(b.type),c.width=2*(a.radiusX||a.webkitRadiusX||0),c.height=2*(a.radiusY||a.webkitRadiusY||0),c.pressure=a.force||a.webkitForce||.5,c.isPrimary=this.isPrimaryTouch(a),c.pointerType=this.POINTER_TYPE,
c.altKey=b.altKey,c.ctrlKey=b.ctrlKey,c.metaKey=b.metaKey,c.shiftKey=b.shiftKey;
var e=this;return c.preventDefault=function(){e.scrolling=!1,e.firstXY=null,b.preventDefault()},c},processTouches:function(a,b){var c=a.changedTouches;this.currentTouchEvent=a;for(var d,e=0;e<c.length;e++)d=c[e],b.call(this,this.touchToPointer(d))},
shouldScroll:function(a){if(this.firstXY){var b,c=a.currentTarget._scrollType;if("none"===c)
b=!1;else if("XY"===c)
b=!0;else{var d=a.changedTouches[0],e=c,f="Y"===c?"X":"Y",g=Math.abs(d["client"+e]-this.firstXY[e]),h=Math.abs(d["client"+f]-this.firstXY[f]);
b=g>=h}return this.firstXY=null,b}},findTouch:function(a,b){for(var c,d=0,e=a.length;d<e&&(c=a[d]);d++)if(c.identifier===b)return!0},
vacuumTouches:function(a){var b=a.touches;
if(R.size>=b.length){var c=[];R.forEach(function(a,d){
if(1!==d&&!this.findTouch(b,d-2)){var e=a.out;c.push(e)}},this),c.forEach(this.cancelOut,this)}},touchstart:function(a){this.vacuumTouches(a),this.setPrimaryTouch(a.changedTouches[0]),this.dedupSynthMouse(a),this.scrolling||(this.clickCount++,this.processTouches(a,this.overDown))},overDown:function(a){R.set(a.pointerId,{target:a.target,out:a,outTarget:a.target}),u.enterOver(a),u.down(a)},touchmove:function(a){this.scrolling||(this.shouldScroll(a)?(this.scrolling=!0,this.touchcancel(a)):(a.preventDefault(),this.processTouches(a,this.moveOverOut)))},moveOverOut:function(a){var b=a,c=R.get(b.pointerId);
if(c){var d=c.out,e=c.outTarget;u.move(b),d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,
d.target=e,b.target?(u.leaveOut(d),u.enterOver(b)):(
b.target=e,b.relatedTarget=null,this.cancelOut(b))),c.out=b,c.outTarget=b.target}},touchend:function(a){this.dedupSynthMouse(a),this.processTouches(a,this.upOut)},upOut:function(a){this.scrolling||(u.up(a),u.leaveOut(a)),this.cleanUpPointer(a)},touchcancel:function(a){this.processTouches(a,this.cancelOut)},cancelOut:function(a){u.cancel(a),u.leaveOut(a),this.cleanUpPointer(a)},cleanUpPointer:function(a){R["delete"](a.pointerId),this.removePrimaryPointer(a)},
dedupSynthMouse:function(a){var b=N.lastTouches,c=a.changedTouches[0];
if(this.isPrimaryTouch(c)){
var d={x:c.clientX,y:c.clientY};b.push(d);var e=function(a,b){var c=a.indexOf(b);c>-1&&a.splice(c,1)}.bind(null,b,d);setTimeout(e,S)}}};M=new c(V.elementAdded,V.elementRemoved,V.elementChanged,V);var W,X,Y,Z=u.pointermap,$=window.MSPointerEvent&&"number"==typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE,_={events:["MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSGotPointerCapture","MSLostPointerCapture"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},POINTER_TYPES:["","unavailable","touch","pen","mouse"],prepareEvent:function(a){var b=a;return $&&(b=u.cloneEvent(a),b.pointerType=this.POINTER_TYPES[a.pointerType]),b},cleanup:function(a){Z["delete"](a)},MSPointerDown:function(a){Z.set(a.pointerId,a);var b=this.prepareEvent(a);u.down(b)},MSPointerMove:function(a){var b=this.prepareEvent(a);u.move(b)},MSPointerUp:function(a){var b=this.prepareEvent(a);u.up(b),this.cleanup(a.pointerId)},MSPointerOut:function(a){var b=this.prepareEvent(a);u.leaveOut(b)},MSPointerOver:function(a){var b=this.prepareEvent(a);u.enterOver(b)},MSPointerCancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.cleanup(a.pointerId)},MSLostPointerCapture:function(a){var b=u.makeEvent("lostpointercapture",a);u.dispatchEvent(b)},MSGotPointerCapture:function(a){var b=u.makeEvent("gotpointercapture",a);u.dispatchEvent(b)}},aa=window.navigator;aa.msPointerEnabled?(W=function(a){i(a),j(this),k(a)&&(u.setCapture(a,this,!0),this.msSetPointerCapture(a))},X=function(a){i(a),u.releaseCapture(a,!0),this.msReleasePointerCapture(a)}):(W=function(a){i(a),j(this),k(a)&&u.setCapture(a,this)},X=function(a){i(a),u.releaseCapture(a)}),Y=function(a){return!!u.captureInfo[a]},g(),h(),l();var ba={dispatcher:u,Installer:c,PointerEvent:a,PointerMap:p,targetFinding:v};return ba});

///////////////////////////////////////////////

///////////////////////////////////////////////
var config = {"show_fabrication": false, "redraw_on_drag": true, "highlight_pin1": false, "extra_fields": [], "dark_mode": false, "bom_view": "left-right", "board_rotation": 0, "checkboxes": "Sourced,Placed", "show_silkscreen": true, "show_pads": true, "layer_view": "FB"}
///////////////////////////////////////////////

///////////////////////////////////////////////
var pcbdata = JSON.parse(LZString.decompressFromBase64("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"))
///////////////////////////////////////////////

///////////////////////////////////////////////
/* Utility functions */

var storagePrefix = 'KiCad_HTML_BOM__' + pcbdata.metadata.title + '__' +
  pcbdata.metadata.revision + '__#';
var storage;

function initStorage(key) {
  try {
    window.localStorage.getItem("blank");
    storage = window.localStorage;
  } catch (e) {
    // localStorage not available
  }
  if (!storage) {
    try {
      window.sessionStorage.getItem("blank");
      storage = window.sessionStorage;
    } catch (e) {
      // sessionStorage also not available
    }
  }
}

function readStorage(key) {
  if (storage) {
    return storage.getItem(storagePrefix + key);
  } else {
    return null;
  }
}

function writeStorage(key, value) {
  if (storage) {
    storage.setItem(storagePrefix + key, value);
  }
}

function fancyDblClickHandler(el, onsingle, ondouble) {
  return function() {
    if (el.getAttribute("data-dblclick") == null) {
      el.setAttribute("data-dblclick", 1);
      setTimeout(function() {
        if (el.getAttribute("data-dblclick") == 1) {
          onsingle();
        }
        el.removeAttribute("data-dblclick");
      }, 200);
    } else {
      el.removeAttribute("data-dblclick");
      ondouble();
    }
  }
}

function smoothScrollToRow(rowid) {
  document.getElementById(rowid).scrollIntoView({
    behavior: "smooth",
    block: "center",
    inline: "nearest"
  });
}

function focusInputField(input) {
  input.scrollIntoView(false);
  input.focus();
  input.select();
}

function copyToClipboard() {
  var text = '';
  for (var node of bomhead.childNodes[0].childNodes) {
    if (node.firstChild) {
      text = text + node.firstChild.nodeValue;
    }
    if (node != bomhead.childNodes[0].lastChild) {
      text += '\t';
    }
  }
  text += '\n';
  for (var row of bombody.childNodes) {
    for (var cell of row.childNodes) {
      for (var node of cell.childNodes) {
        if (node.nodeName == "INPUT") {
          if (node.checked) {
            text = text + '✓';
          }
        } else if (node.nodeName == "MARK") {
          text = text + node.firstChild.nodeValue;
        } else {
          text = text + node.nodeValue;
        }
      }
      if (cell != row.lastChild) {
        text += '\t';
      }
    }
    text += '\n';
  }
  var textArea = document.createElement("textarea");
  textArea.classList.add('clipboard-temp');
  textArea.value = text;

  document.body.appendChild(textArea);
  textArea.focus();
  textArea.select();

  try {
    if (document.execCommand('copy')) {
      console.log('Bom copied to clipboard.');
    }
  } catch (err) {
    console.log('Can not copy to clipboard.');
  }

  document.body.removeChild(textArea);
}

function removeGutterNode(node) {
  for (var i = 0; i < node.childNodes.length; i++) {
    if (node.childNodes[i].classList &&
      node.childNodes[i].classList.contains("gutter")) {
      node.removeChild(node.childNodes[i]);
      break;
    }
  }
}

function cleanGutters() {
  removeGutterNode(document.getElementById("bot"));
  removeGutterNode(document.getElementById("canvasdiv"));
}

var units = {
  prefixes: {
    giga: ["G", "g", "giga", "Giga", "GIGA"],
    mega: ["M", "mega", "Mega", "MEGA"],
    kilo: ["K", "k", "kilo", "Kilo", "KILO"],
    milli: ["m", "milli", "Milli", "MILLI"],
    micro: ["U", "u", "micro", "Micro", "MICRO", "μ", "µ"], // different utf8 μ
    nano: ["N", "n", "nano", "Nano", "NANO"],
    pico: ["P", "p", "pico", "Pico", "PICO"],
  },
  unitsShort: ["R", "r", "Ω", "F", "f", "H", "h"],
  unitsLong: [
    "OHM", "Ohm", "ohm", "ohms",
    "FARAD", "Farad", "farad",
    "HENRY", "Henry", "henry"
  ],
  getMultiplier: function(s) {
    if (this.prefixes.giga.includes(s)) return 1e9;
    if (this.prefixes.mega.includes(s)) return 1e6;
    if (this.prefixes.kilo.includes(s)) return 1e3;
    if (this.prefixes.milli.includes(s)) return 1e-3;
    if (this.prefixes.micro.includes(s)) return 1e-6;
    if (this.prefixes.nano.includes(s)) return 1e-9;
    if (this.prefixes.pico.includes(s)) return 1e-12;
    return 1;
  },
  valueRegex: null,
}

function initUtils() {
  var allPrefixes = units.prefixes.giga
                    .concat(units.prefixes.mega)
                    .concat(units.prefixes.kilo)
                    .concat(units.prefixes.milli)
                    .concat(units.prefixes.micro)
                    .concat(units.prefixes.nano)
                    .concat(units.prefixes.pico);
  var allUnits = units.unitsShort.concat(units.unitsLong);
  units.valueRegex = new RegExp("^([0-9\.]+)" +
                         "\\s*(" + allPrefixes.join("|") + ")?" +
                         "(" + allUnits.join("|") + ")?" +
                         "(\\b.*)?$", "");
  units.valueAltRegex = new RegExp("^([0-9]*)" +
                         "(" + units.unitsShort.join("|") + ")?" +
                         "([GgMmKkUuNnPp])?" +
                         "([0-9]*)" +
                         "(\\b.*)?$", "");
  for (var bom_type of ["both", "F", "B"]) {
    for (var row of pcbdata.bom[bom_type]) {
      row.push(parseValue(row[1], row[3][0][0]));
    }
  }
}

function parseValue(val, ref) {
  var inferUnit = (unit, ref) => {
    if (unit) {
      unit = unit.toLowerCase();
      if (unit == 'Ω' || unit == "ohm" || unit == "ohms") {
        unit = 'r';
      }
      unit = unit[0];
    } else {
      ref = /^([a-z]+)\d+$/i.exec(ref);
      if (ref) {
        ref = ref[1].toLowerCase();
        if (ref == "c") unit = 'f';
        else if (ref == "l") unit = 'h';
        else if (ref == "r" || ref == "rv") unit = 'r';
        else unit = null;
      }
    }
    return unit;
  };
  val = val.replace(/,/g, "");
  var match = units.valueRegex.exec(val);
  var unit;
  if (match) {
    val = parseFloat(match[1]);
    if (match[2]) {
      val = val * units.getMultiplier(match[2]);
    }
    unit = inferUnit(match[3], ref);
    if (!unit) return null;
    else return {
      val: val,
      unit: unit,
      extra: match[4],
    }
  }
  match = units.valueAltRegex.exec(val);
  if (match && (match[1] || match[4])) {
    val = parseFloat(match[1] + "." + match[4]);
    if (match[3]) {
      val = val * units.getMultiplier(match[3]);
    }
    unit = inferUnit(match[2], ref);
    if (!unit) return null;
    else return {
      val: val,
      unit: unit,
      extra: match[5],
    }
  }
  return null;
}

function valueCompare(a, b, stra, strb) {
  if (a === null && b === null) {
    // Failed to parse both values, compare them as strings.
    if (stra != strb) return stra > strb ? 1 : -1;
    else return 0;
  } else if (a === null) {
    return 1;
  } else if (b === null) {
    return -1;
  } else {
    if (a.unit != b.unit) return a.unit > b.unit ? 1 : -1;
    else if (a.val != b.val) return a.val > b.val ? 1 : -1;
    else if (a.extra != b.extra) return a.extra > b.extra ? 1 : -1;
    else return 0;
  }
}

function validateSaveImgDimension(element) {
  var valid = false;
  var intValue = 0;
  if (/^[1-9]\d*$/.test(element.value)) {
    intValue = parseInt(element.value);
    if (intValue <= 16000) {
      valid = true;
    }
  }
  if (valid) {
    element.classList.remove("invalid");
  } else {
    element.classList.add("invalid");
  }
  return intValue;
}

function saveImage(layer) {
  var width = validateSaveImgDimension(document.getElementById("render-save-width"));
  var height = validateSaveImgDimension(document.getElementById("render-save-height"));
  var bgcolor = null;
  if (!document.getElementById("render-save-transparent").checked) {
    var style = getComputedStyle(topmostdiv);
    bgcolor = style.getPropertyValue("background-color");
  }
  if (!width || !height) return;

  // Prepare image
  var canvas = document.createElement("canvas");
  var layerdict = {
    transform: {
      x: 0,
      y: 0,
      s: 1,
      panx: 0,
      pany: 0,
      zoom: 1,
    },
    bg: canvas,
    fab: canvas,
    silk: canvas,
    highlight: canvas,
    layer: layer,
  }
  // Do the rendering
  recalcLayerScale(layerdict, width, height);
  prepareLayer(layerdict);
  clearCanvas(canvas, bgcolor);
  drawBackground(layerdict, false);
  drawHighlightsOnLayer(layerdict, false);

  // Save image
  var imgdata = canvas.toDataURL("image/png");

  var filename = pcbdata.metadata.title;
  if (pcbdata.metadata.revision) {
    filename += `.${pcbdata.metadata.revision}`;
  }
  filename += `.${layer}.png`;
  saveFile(filename, dataURLtoBlob(imgdata));
}

function saveSettings() {
  var data = {
    type: "InteractiveHtmlBom settings",
    version: 1,
    pcbmetadata: pcbdata.metadata,
    settings: settings,
  }
  var blob = new Blob([JSON.stringify(data, null, 4)], {type: "application/json"});
  saveFile(`${pcbdata.metadata.title}.settings.json`, blob);
}

function loadSettings() {
  var input = document.createElement("input");
  input.type = "file";
  input.accept = ".settings.json";
  input.onchange = function(e) {
    var file = e.target.files[0];
    var reader = new FileReader();
    reader.onload = readerEvent => {
      var content = readerEvent.target.result;
      var newSettings;
      try {
        newSettings = JSON.parse(content);
      } catch(e) {
        alert("Selected file is not InteractiveHtmlBom settings file.");
        return;
      }
      if (newSettings.type != "InteractiveHtmlBom settings") {
        alert("Selected file is not InteractiveHtmlBom settings file.");
        return;
      }
      var metadataMatches = newSettings.hasOwnProperty("pcbmetadata");
      if (metadataMatches) {
        for (var k in pcbdata.metadata) {
          if (!newSettings.pcbmetadata.hasOwnProperty(k) || newSettings.pcbmetadata[k] != pcbdata.metadata[k]) {
            metadataMatches = false;
          }
        }
      }
      if (!metadataMatches) {
        var currentMetadata = JSON.stringify(pcbdata.metadata, null, 4);
        var fileMetadata = JSON.stringify(newSettings.pcbmetadata, null, 4);
        if (!confirm(
          `Settins file metadata does not match current metadata.\n\n` +
          `Page metadata:\n${currentMetadata}\n\n` +
          `Settings file metadata:\n${fileMetadata}\n\n` +
          `Press OK if you would like to import settings anyway.`)) {
          return;
        }
      }
      overwriteSettings(newSettings.settings);
    }
    reader.readAsText(file, 'UTF-8');
  }
  input.click();
}

function overwriteSettings(newSettings) {
  initDone = false;
  Object.assign(settings, newSettings);
  writeStorage("bomlayout", settings.bomlayout);
  writeStorage("bommode", settings.bommode);
  writeStorage("canvaslayout", settings.canvaslayout);
  writeStorage("bomCheckboxes", settings.checkboxes.join(","));
  document.getElementById("bomCheckboxes").value = settings.checkboxes.join(",");
  for (var checkbox of settings.checkboxes) {
    writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
  }
  padsVisible(settings.renderPads);
  document.getElementById("padsCheckbox").checked = settings.renderPads;
  fabricationVisible(settings.renderFabrication);
  document.getElementById("fabricationCheckbox").checked = settings.renderFabrication;
  silkscreenVisible(settings.renderSilkscreen);
  document.getElementById("silkscreenCheckbox").checked = settings.renderSilkscreen;
  referencesVisible(settings.renderReferences);
  document.getElementById("referencesCheckbox").checked = settings.renderReferences;
  valuesVisible(settings.renderValues);
  document.getElementById("valuesCheckbox").checked = settings.renderValues;
  tracksVisible(settings.renderTracks);
  document.getElementById("tracksCheckbox").checked = settings.renderTracks;
  zonesVisible(settings.renderZones);
  document.getElementById("zonesCheckbox").checked = settings.renderZones;
  dnpOutline(settings.renderDnpOutline);
  document.getElementById("dnpOutlineCheckbox").checked = settings.renderDnpOutline;
  setRedrawOnDrag(settings.redrawOnDrag);
  document.getElementById("dragCheckbox").checked = settings.redrawOnDrag;
  setDarkMode(settings.darkMode);
  document.getElementById("darkmodeCheckbox").checked = settings.darkMode;
  setHighlightPin1(settings.highlightpin1);
  document.getElementById("highlightpin1Checkbox").checked = settings.highlightpin1;
  writeStorage("boardRotation", settings.boardRotation);
  document.getElementById("boardRotation").value = settings.boardRotation / 5;
  document.getElementById("rotationDegree").textContent = settings.boardRotation;
  initDone = true;
  prepCheckboxes();
  changeBomLayout(settings.bomlayout);
}

function saveFile(filename, blob) {
  var link = document.createElement("a");
  var objurl = URL.createObjectURL(blob);
  link.download = filename;
  link.href = objurl;
  link.click();
}

function dataURLtoBlob(dataurl) {
  var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
      bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
  while(n--){
      u8arr[n] = bstr.charCodeAt(n);
  }
  return new Blob([u8arr], {type:mime});
}

var settings = {
  canvaslayout: "default",
  bomlayout: "default",
  bommode: "grouped",
  checkboxes: [],
  checkboxStoredRefs: {},
  darkMode: false,
  highlightpin1: false,
  redrawOnDrag: true,
  boardRotation: 0,
  renderPads: true,
  renderReferences: true,
  renderValues: true,
  renderSilkscreen: true,
  renderFabrication: true,
  renderDnpOutline: false,
  renderTracks: true,
  renderZones: true,
}

function initDefaults() {
  settings.bomlayout = readStorage("bomlayout");
  if (settings.bomlayout === null) {
    settings.bomlayout = config.bom_view;
  }
  if (!['bom-only', 'left-right', 'top-bottom'].includes(settings.bomlayout)) {
    settings.bomlayout = config.bom_view;
  }
  settings.bommode = readStorage("bommode");
  if (settings.bommode === null) {
    settings.bommode = "grouped";
  }
  if (!["grouped", "ungrouped", "netlist"].includes(settings.bommode)) {
    settings.bommode = "grouped";
  }
  settings.canvaslayout = readStorage("canvaslayout");
  if (settings.canvaslayout === null) {
    settings.canvaslayout = config.layer_view;
  }
  var bomCheckboxes = readStorage("bomCheckboxes");
  if (bomCheckboxes === null) {
    bomCheckboxes = config.checkboxes;
  }
  settings.checkboxes = bomCheckboxes.split(",").filter((e) => e);
  document.getElementById("bomCheckboxes").value = bomCheckboxes;

  function initBooleanSetting(storageString, def, elementId, func) {
    var b = readStorage(storageString);
    if (b === null) {
      b = def;
    } else {
      b = (b == "true");
    }
    document.getElementById(elementId).checked = b;
    func(b);
  }

  initBooleanSetting("padsVisible", config.show_pads, "padsCheckbox", padsVisible);
  initBooleanSetting("fabricationVisible", config.show_fabrication, "fabricationCheckbox", fabricationVisible);
  initBooleanSetting("silkscreenVisible", config.show_silkscreen, "silkscreenCheckbox", silkscreenVisible);
  initBooleanSetting("referencesVisible", true, "referencesCheckbox", referencesVisible);
  initBooleanSetting("valuesVisible", true, "valuesCheckbox", valuesVisible);
  if ("tracks" in pcbdata) {
    initBooleanSetting("tracksVisible", true, "tracksCheckbox", tracksVisible);
    initBooleanSetting("zonesVisible", true, "zonesCheckbox", zonesVisible);
  } else {
    document.getElementById("tracksAndZonesCheckboxes").style.display = "none";
    tracksVisible(false);
    zonesVisible(false);
  }
  initBooleanSetting("dnpOutline", false, "dnpOutlineCheckbox", dnpOutline);
  initBooleanSetting("redrawOnDrag", config.redraw_on_drag, "dragCheckbox", setRedrawOnDrag);
  initBooleanSetting("darkmode", config.dark_mode, "darkmodeCheckbox", setDarkMode);
  initBooleanSetting("highlightpin1", config.highlight_pin1, "highlightpin1Checkbox", setHighlightPin1);
  settings.boardRotation = readStorage("boardRotation");
  if (settings.boardRotation === null) {
    settings.boardRotation = config.board_rotation * 5;
  } else {
    settings.boardRotation = parseInt(settings.boardRotation);
  }
  document.getElementById("boardRotation").value = settings.boardRotation / 5;
  document.getElementById("rotationDegree").textContent = settings.boardRotation;
}

///////////////////////////////////////////////

///////////////////////////////////////////////
/* PCB rendering code */

var emptyContext2d = document.createElement("canvas").getContext("2d");

function deg2rad(deg) {
  return deg * Math.PI / 180;
}

function calcFontPoint(linepoint, text, offsetx, offsety, tilt) {
  var point = [
    linepoint[0] * text.width + offsetx,
    linepoint[1] * text.height + offsety
  ];
  // Adding half a line height here is technically a bug
  // but pcbnew currently does the same, text is slightly shifted.
  point[0] -= (point[1] + text.height * 0.5) * tilt;
  return point;
}

function drawtext(ctx, text, color, flip) {
  if ("ref" in text && !settings.renderReferences) return;
  if ("val" in text && !settings.renderValues) return;
  ctx.save();
  ctx.fillStyle = color;
  ctx.strokeStyle = color;
  ctx.lineCap = "round";
  ctx.lineJoin = "round";
  ctx.lineWidth = text.thickness;
  if (text.svgpath) {
    ctx.stroke(new Path2D(text.svgpath));
    ctx.restore();
    return;
  }
  ctx.translate(...text.pos);
  var angle = -text.angle;
  if (text.attr.includes("mirrored")) {
    ctx.scale(-1, 1);
    angle = -angle;
  }
  var tilt = 0;
  if (text.attr.includes("italic")) {
    tilt = 0.125;
  }
  var interline = (text.height * 1.5 + text.thickness) / 2;
  var txt = text.text.split("\n");
  // KiCad ignores last empty line.
  if (txt[txt.length - 1] == '') txt.pop();
  ctx.rotate(deg2rad(angle));
  for (var i in txt) {
    var offsety = (-(txt.length - 1) + i * 2) * interline + text.height / 2;
    var lineWidth = 0;
    for (var c of txt[i]) {
      if (c == '\t') {
        var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
        lineWidth += fourSpaces - lineWidth % fourSpaces;
      } else {
        lineWidth += pcbdata.font_data[c].w * text.width;
      }
    }
    var offsetx = 0;
    switch (text.horiz_justify) {
      case -1:
        // Justify left, do nothing
        break;
      case 0:
        // Justify center
        offsetx -= lineWidth / 2;
        break;
      case 1:
        // Justify right
        offsetx -= lineWidth;
        break;
    }
    for (var c of txt[i]) {
      if (c == '\t') {
        var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
        offsetx += fourSpaces - offsetx % fourSpaces;
        continue;
      }
      for (var line of pcbdata.font_data[c].l) {
        ctx.beginPath();
        ctx.moveTo(...calcFontPoint(line[0], text, offsetx, offsety, tilt));
        for (var i = 1; i < line.length; i++) {
          ctx.lineTo(...calcFontPoint(line[i], text, offsetx, offsety, tilt));
        }
        ctx.stroke();
      }
      offsetx += pcbdata.font_data[c].w * text.width;
    }
  }
  ctx.restore();
}

function drawedge(ctx, scalefactor, edge, color) {
  ctx.strokeStyle = color;
  ctx.lineWidth = Math.max(1 / scalefactor, edge.width);
  ctx.lineCap = "round";
  if (edge.svgpath) {
    ctx.stroke(new Path2D(edge.svgpath));
  } else {
    ctx.beginPath();
    if (edge.type == "segment") {
      ctx.moveTo(...edge.start);
      ctx.lineTo(...edge.end);
    }
    if (edge.type == "arc") {
      ctx.arc(
        ...edge.start,
        edge.radius,
        deg2rad(edge.startangle),
        deg2rad(edge.endangle));
    }
    if (edge.type == "circle") {
      ctx.arc(
        ...edge.start,
        edge.radius,
        0, 2 * Math.PI);
      ctx.closePath();
    }
    if (edge.type == "curve") {
      ctx.moveTo(...edge.start);
      ctx.bezierCurveTo(...edge.cpa, ...edge.cpb, ...edge.end);
    }
    ctx.stroke();
  }
}

function getChamferedRectPath(size, radius, chamfpos, chamfratio) {
  // chamfpos is a bitmask, left = 1, right = 2, bottom left = 4, bottom right = 8
  var path = new Path2D();
  var width = size[0];
  var height = size[1];
  var x = width * -0.5;
  var y = height * -0.5;
  var chamfOffset = Math.min(width, height) * chamfratio;
  path.moveTo(x, 0);
  if (chamfpos & 4) {
    path.lineTo(x, y + height - chamfOffset);
    path.lineTo(x + chamfOffset, y + height);
    path.lineTo(0, y + height);
  } else {
    path.arcTo(x, y + height, x + width, y + height, radius);
  }
  if (chamfpos & 8) {
    path.lineTo(x + width - chamfOffset, y + height);
    path.lineTo(x + width, y + height - chamfOffset);
    path.lineTo(x + width, 0);
  } else {
    path.arcTo(x + width, y + height, x + width, y, radius);
  }
  if (chamfpos & 2) {
    path.lineTo(x + width, y + chamfOffset);
    path.lineTo(x + width - chamfOffset, y);
    path.lineTo(0, y);
  } else {
    path.arcTo(x + width, y, x, y, radius);
  }
  if (chamfpos & 1) {
    path.lineTo(x + chamfOffset, y);
    path.lineTo(x, y + chamfOffset);
    path.lineTo(x, 0);
  } else {
    path.arcTo(x, y, x, y + height, radius);
  }
  path.closePath();
  return path;
}

function getOblongPath(size) {
  return getChamferedRectPath(size, Math.min(size[0], size[1]) / 2, 0, 0);
}

function getPolygonsPath(shape) {
  if (shape.path2d) {
    return shape.path2d;
  }
  if (shape.svgpath) {
    shape.path2d = new Path2D(shape.svgpath);
  } else {
    var path = new Path2D();
    for (var polygon of shape.polygons) {
      path.moveTo(...polygon[0]);
      for (var i = 1; i < polygon.length; i++) {
        path.lineTo(...polygon[i]);
      }
      path.closePath();
    }
    shape.path2d = path;
  }
  return shape.path2d;
}

function drawPolygonShape(ctx, shape, color) {
  ctx.save();
  ctx.fillStyle = color;
  if (!shape.svgpath) {
    ctx.translate(...shape.pos);
    ctx.rotate(deg2rad(-shape.angle));
  }
  ctx.fill(getPolygonsPath(shape));
  ctx.restore();
}

function drawDrawing(ctx, layer, scalefactor, drawing, color) {
  if (["segment", "arc", "circle", "curve"].includes(drawing.type)) {
    drawedge(ctx, scalefactor, drawing, color);
  } else if (drawing.type == "polygon") {
    drawPolygonShape(ctx, drawing, color);
  } else {
    drawtext(ctx, drawing, color, layer == "B");
  }
}

function getCirclePath(radius) {
  var path = new Path2D();
  path.arc(0, 0, radius, 0, 2 * Math.PI);
  path.closePath();
  return path;
}

function getCachedPadPath(pad) {
  if (!pad.path2d) {
    // if path2d is not set, build one and cache it on pad object
    if (pad.shape == "rect") {
      pad.path2d = new Path2D();
      pad.path2d.rect(...pad.size.map(c => -c * 0.5), ...pad.size);
    } else if (pad.shape == "oval") {
      pad.path2d = getOblongPath(pad.size);
    } else if (pad.shape == "circle") {
      pad.path2d = getCirclePath(pad.size[0] / 2);
    } else if (pad.shape == "roundrect") {
      pad.path2d = getChamferedRectPath(pad.size, pad.radius, 0, 0);
    } else if (pad.shape == "chamfrect") {
      pad.path2d = getChamferedRectPath(pad.size, pad.radius, pad.chamfpos, pad.chamfratio)
    } else if (pad.shape == "custom") {
      pad.path2d = getPolygonsPath(pad);
    }
  }
  return pad.path2d;
}

function drawPad(ctx, pad, color, outline, hole) {
  ctx.save();
  ctx.translate(...pad.pos);
  ctx.rotate(deg2rad(pad.angle));
  if (pad.offset) {
    ctx.translate(...pad.offset);
  }
  ctx.fillStyle = color;
  ctx.strokeStyle = color;
  var path = getCachedPadPath(pad);
  if (outline) {
    ctx.stroke(path);
  } else {
    ctx.fill(path);
  }
  if (pad.type == "th" && hole) {
    if (pad.offset) {
      ctx.translate(-pad.offset[0], -pad.offset[1]);
    }
    ctx.fillStyle = "#CCCCCC";
    if (pad.drillshape == "oblong") {
      ctx.fill(getOblongPath(pad.drillsize));
    } else {
      ctx.fill(getCirclePath(pad.drillsize[0] / 2));
    }
  }
  ctx.restore();
}

function drawModule(ctx, layer, scalefactor, module, padcolor, outlinecolor, highlight, outline) {
  if (highlight) {
    // draw bounding box
    if (module.layer == layer) {
      ctx.save();
      ctx.globalAlpha = 0.2;
      ctx.translate(...module.bbox.pos);
      ctx.rotate(deg2rad(-module.bbox.angle));
      ctx.translate(...module.bbox.relpos);
      ctx.fillStyle = padcolor;
      ctx.fillRect(0, 0, ...module.bbox.size);
      ctx.globalAlpha = 1;
      ctx.strokeStyle = padcolor;
      ctx.strokeRect(0, 0, ...module.bbox.size);
      ctx.restore();
    }
  }
  // draw drawings
  for (var drawing of module.drawings) {
    if (drawing.layer == layer) {
      drawDrawing(ctx, layer, scalefactor, drawing.drawing, padcolor);
    }
  }
  // draw pads
  if (settings.renderPads) {
    for (var pad of module.pads) {
      if (pad.layers.includes(layer)) {
        drawPad(ctx, pad, padcolor, outline, true);
        if (pad.pin1 && settings.highlightpin1) {
          drawPad(ctx, pad, outlinecolor, true, false);
        }
      }
    }
  }
}

function drawEdgeCuts(canvas, scalefactor) {
  var ctx = canvas.getContext("2d");
  var edgecolor = getComputedStyle(topmostdiv).getPropertyValue('--pcb-edge-color');
  for (var edge of pcbdata.edges) {
    drawedge(ctx, scalefactor, edge, edgecolor);
  }
}

function drawModules(canvas, layer, scalefactor, highlight) {
  var ctx = canvas.getContext("2d");
  ctx.lineWidth = 3 / scalefactor;
  var style = getComputedStyle(topmostdiv);
  var padcolor = style.getPropertyValue('--pad-color');
  var outlinecolor = style.getPropertyValue('--pin1-outline-color');
  if (highlight) {
    padcolor = style.getPropertyValue('--pad-color-highlight');
    outlinecolor = style.getPropertyValue('--pin1-outline-color-highlight');
  }
  for (var i = 0; i < pcbdata.modules.length; i++) {
    var mod = pcbdata.modules[i];
    var outline = settings.renderDnpOutline && pcbdata.bom.skipped.includes(i);
    if (!highlight || highlightedModules.includes(i)) {
      drawModule(ctx, layer, scalefactor, mod, padcolor, outlinecolor, highlight, outline);
    }
  }
}

function drawBgLayer(layername, canvas, layer, scalefactor, edgeColor, polygonColor, textColor) {
  var ctx = canvas.getContext("2d");
  for (var d of pcbdata[layername][layer]) {
    if (["segment", "arc", "circle", "curve"].includes(d.type)) {
      drawedge(ctx, scalefactor, d, edgeColor);
    } else if (d.type == "polygon") {
      drawPolygonShape(ctx, d, polygonColor);
    } else {
      drawtext(ctx, d, textColor, layer == "B");
    }
  }
}

function drawTracks(canvas, layer, color, highlight) {
  ctx = canvas.getContext("2d");
  ctx.strokeStyle = color;
  ctx.lineCap = "round";
  for(var track of pcbdata.tracks[layer]) {
    if (highlight && highlightedNet != track.net) continue;
    ctx.lineWidth = track.width;
    ctx.beginPath();
    ctx.moveTo(...track.start);
    ctx.lineTo(...track.end);
    ctx.stroke();
  }
}

function drawZones(canvas, layer, color, highlight) {
  ctx = canvas.getContext("2d");
  ctx.strokeStyle = color;
  ctx.fillStyle = color;
  ctx.lineJoin = "round";
  for(var zone of pcbdata.zones[layer]) {
    if (!zone.path2d) {
      zone.path2d = getPolygonsPath(zone);
    }
    if (highlight && highlightedNet != zone.net) continue;
    ctx.lineWidth = zone.width ? zone.width : 0;
    ctx.fill(zone.path2d);
    ctx.stroke(zone.path2d);
  }
}

function clearCanvas(canvas, color = null) {
  var ctx = canvas.getContext("2d");
  ctx.save();
  ctx.setTransform(1, 0, 0, 1, 0, 0);
  if (color) {
    ctx.fillStyle = color;
    ctx.fillRect(0, 0, canvas.width, canvas.height);
  } else {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
  }
  ctx.restore();
}

function drawNets(canvas, layer, highlight) {
  var style = getComputedStyle(topmostdiv);
  if (settings.renderTracks) {
    var trackColor = style.getPropertyValue(highlight ? '--track-color-highlight' : '--track-color');
    drawTracks(canvas, layer, trackColor, highlight);
  }
  if (settings.renderZones) {
    var zoneColor = style.getPropertyValue(highlight ? '--zone-color-highlight' : '--zone-color');
    drawZones(canvas, layer, zoneColor, highlight);
  }
  if (highlight && settings.renderPads) {
    var padColor = style.getPropertyValue('--pad-color-highlight');
    var ctx = canvas.getContext("2d");
    for (var mod of pcbdata.modules) {
      // draw pads
      for (var pad of mod.pads) {
        if (highlightedNet != pad.net) continue;
        if (pad.layers.includes(layer)) {
          drawPad(ctx, pad, padColor, false, true);
        }
      }
    }
  }
}

function drawHighlightsOnLayer(canvasdict, clear = true) {
  if (clear) {
    clearCanvas(canvasdict.highlight);
  }
  if (highlightedModules.length > 0) {
    drawModules(canvasdict.highlight, canvasdict.layer,
      canvasdict.transform.s * canvasdict.transform.zoom, true);
  }
  if (highlightedNet !== null) {
    drawNets(canvasdict.highlight, canvasdict.layer, true);
  }
}

function drawHighlights() {
  drawHighlightsOnLayer(allcanvas.front);
  drawHighlightsOnLayer(allcanvas.back);
}

function drawBackground(canvasdict, clear = true) {
  if (clear) {
    clearCanvas(canvasdict.bg);
    clearCanvas(canvasdict.fab);
    clearCanvas(canvasdict.silk);
  }

  drawNets(canvasdict.bg, canvasdict.layer, false);
  drawModules(canvasdict.bg, canvasdict.layer,
    canvasdict.transform.s * canvasdict.transform.zoom, false);

  drawEdgeCuts(canvasdict.bg, canvasdict.transform.s);

  var style = getComputedStyle(topmostdiv);
  var edgeColor = style.getPropertyValue('--silkscreen-edge-color');
  var polygonColor = style.getPropertyValue('--silkscreen-polygon-color');
  var textColor = style.getPropertyValue('--silkscreen-text-color');
  if (settings.renderSilkscreen) {
    drawBgLayer(
      "silkscreen", canvasdict.silk, canvasdict.layer,
      canvasdict.transform.s * canvasdict.transform.zoom,
      edgeColor, polygonColor, textColor);
  }
  edgeColor = style.getPropertyValue('--fabrication-edge-color');
  polygonColor = style.getPropertyValue('--fabrication-polygon-color');
  textColor = style.getPropertyValue('--fabrication-text-color');
  if (settings.renderFabrication) {
    drawBgLayer(
      "fabrication", canvasdict.fab, canvasdict.layer,
      canvasdict.transform.s * canvasdict.transform.zoom,
      edgeColor, polygonColor, textColor);
  }
}

function prepareCanvas(canvas, flip, transform) {
  var ctx = canvas.getContext("2d");
  ctx.setTransform(1, 0, 0, 1, 0, 0);
  var fontsize = 1.55;
  ctx.scale(transform.zoom, transform.zoom);
  ctx.translate(transform.panx, transform.pany);
  if (flip) {
    ctx.scale(-1, 1);
  }
  ctx.translate(transform.x, transform.y);
  ctx.rotate(deg2rad(settings.boardRotation));
  ctx.scale(transform.s, transform.s);
}

function prepareLayer(canvasdict) {
  var flip = (canvasdict.layer == "B");
  for (var c of ["bg", "fab", "silk", "highlight"]) {
    prepareCanvas(canvasdict[c], flip, canvasdict.transform);
  }
}

function rotateVector(v, angle) {
  angle = deg2rad(angle);
  return [
    v[0] * Math.cos(angle) - v[1] * Math.sin(angle),
    v[0] * Math.sin(angle) + v[1] * Math.cos(angle)
  ];
}

function applyRotation(bbox) {
  var corners = [
    [bbox.minx, bbox.miny],
    [bbox.minx, bbox.maxy],
    [bbox.maxx, bbox.miny],
    [bbox.maxx, bbox.maxy],
  ];
  corners = corners.map((v) => rotateVector(v, settings.boardRotation));
  return {
    minx: corners.reduce((a, v) => Math.min(a, v[0]), Infinity),
    miny: corners.reduce((a, v) => Math.min(a, v[1]), Infinity),
    maxx: corners.reduce((a, v) => Math.max(a, v[0]), -Infinity),
    maxy: corners.reduce((a, v) => Math.max(a, v[1]), -Infinity),
  }
}

function recalcLayerScale(layerdict, width, height) {
  var bbox = applyRotation(pcbdata.edges_bbox);
  var scalefactor = 0.98 * Math.min(
    width / (bbox.maxx - bbox.minx),
    height / (bbox.maxy - bbox.miny)
  );
  if (scalefactor < 0.1) {
    scalefactor = 1;
  }
  layerdict.transform.s = scalefactor;
  var flip = (layerdict.layer == "B");
  if (flip) {
    layerdict.transform.x = -((bbox.maxx + bbox.minx) * scalefactor + width) * 0.5;
  } else {
    layerdict.transform.x = -((bbox.maxx + bbox.minx) * scalefactor - width) * 0.5;
  }
  layerdict.transform.y = -((bbox.maxy + bbox.miny) * scalefactor - height) * 0.5;
  for (var c of ["bg", "fab", "silk", "highlight"]) {
    canvas = layerdict[c];
    canvas.width = width;
    canvas.height = height;
    canvas.style.width = (width / devicePixelRatio) + "px";
    canvas.style.height = (height / devicePixelRatio) + "px";
  }
}

function redrawCanvas(layerdict) {
  prepareLayer(layerdict);
  drawBackground(layerdict);
  drawHighlightsOnLayer(layerdict);
}

function resizeCanvas(layerdict) {
  var canvasdivid = {
    "F": "frontcanvas",
    "B": "backcanvas"
  } [layerdict.layer];
  var width = document.getElementById(canvasdivid).clientWidth * devicePixelRatio;
  var height = document.getElementById(canvasdivid).clientHeight * devicePixelRatio;
  recalcLayerScale(layerdict, width, height);
  redrawCanvas(layerdict);
}

function resizeAll() {
  resizeCanvas(allcanvas.front);
  resizeCanvas(allcanvas.back);
}

function pointWithinDistanceToSegment(x, y, x1, y1, x2, y2, d) {
  var A = x - x1;
  var B = y - y1;
  var C = x2 - x1;
  var D = y2 - y1;

  var dot = A * C + B * D;
  var len_sq = C * C + D * D;
  var dx, dy;
  if (len_sq == 0) {
    // start and end of the segment coincide
    dx = x - x1;
    dy = y - y1;
  } else {
    var param = dot / len_sq;
    var xx, yy;
    if (param < 0) {
      xx = x1;
      yy = y1;
    } else if (param > 1) {
      xx = x2;
      yy = y2;
    } else {
      xx = x1 + param * C;
      yy = y1 + param * D;
    }
    dx = x - xx;
    dy = y - yy;
  }
  return dx * dx + dy * dy <= d * d;
}

function pointWithinPad(x, y, pad) {
  var v = [x - pad.pos[0], y - pad.pos[1]];
  v = rotateVector(v, -pad.angle);
  if (pad.offset) {
    v[0] -= pad.offset[0];
    v[1] -= pad.offset[1];
  }
  return emptyContext2d.isPointInPath(getCachedPadPath(pad), ...v);
}

function netHitScan(layer, x, y) {
  // Check track segments
  if (settings.renderTracks && pcbdata.tracks) {
    for(var track of pcbdata.tracks[layer]) {
      if (pointWithinDistanceToSegment(x, y, ...track.start, ...track.end, track.width / 2)) {
        return track.net;
      }
    }
  }
  // Check pads
  if (settings.renderPads) {
    for (var mod of pcbdata.modules) {
      for(var pad of mod.pads) {
        if (pad.layers.includes(layer) && pointWithinPad(x, y, pad)) {
          return pad.net;
        }
      }
    }
  }
  return null;
}

function pointWithinModuleBbox(x, y, bbox) {
  var v = [x - bbox.pos[0], y - bbox.pos[1]];
  v = rotateVector(v, bbox.angle);
  return bbox.relpos[0] <= v[0] && v[0] <= bbox.relpos[0] + bbox.size[0] &&
         bbox.relpos[1] <= v[1] && v[1] <= bbox.relpos[1] + bbox.size[1];
}

function bboxHitScan(layer, x, y) {
  var result = [];
  for (var i = 0; i < pcbdata.modules.length; i++) {
    var module = pcbdata.modules[i];
    if (module.layer == layer) {
      if (pointWithinModuleBbox(x, y, module.bbox)) {
        result.push(i);
      }
    }
  }
  return result;
}

function handlePointerDown(e, layerdict) {
  if (e.button != 0) {
    return;
  }
  e.preventDefault();
  e.stopPropagation();

  if (!e.hasOwnProperty("offsetX")) {
    // The polyfill doesn't set this properly
    e.offsetX = e.pageX - e.currentTarget.offsetLeft;
    e.offsetY = e.pageY - e.currentTarget.offsetTop;
  }

  layerdict.pointerStates[e.pointerId] = {
    distanceTravelled: 0,
    lastX: e.offsetX,
    lastY: e.offsetY,
    downTime: Date.now(),
  };
}

function handleMouseClick(e, layerdict) {
  if (!e.hasOwnProperty("offsetX")) {
    // The polyfill doesn't set this properly
    e.offsetX = e.pageX - e.currentTarget.offsetLeft;
    e.offsetY = e.pageY - e.currentTarget.offsetTop;
  }

  var x = e.offsetX;
  var y = e.offsetY;
  var t = layerdict.transform;
  if (layerdict.layer == "B") {
    x = (devicePixelRatio * x / t.zoom - t.panx + t.x) / -t.s;
  } else {
    x = (devicePixelRatio * x / t.zoom - t.panx - t.x) / t.s;
  }
  y = (devicePixelRatio * y / t.zoom - t.y - t.pany) / t.s;
  var v = rotateVector([x, y], -settings.boardRotation);
  if ("nets" in pcbdata) {
    var net = netHitScan(layerdict.layer, ...v);
    if (net !== highlightedNet) {
      netClicked(net);
    }
  }
  if (highlightedNet === null) {
    var modules = bboxHitScan(layerdict.layer, ...v);
    if (modules.length > 0) {
      modulesClicked(modules);
    }
  }
}

function handlePointerLeave(e, layerdict) {
  e.preventDefault();
  e.stopPropagation();

  if (!settings.redrawOnDrag) {
    redrawCanvas(layerdict);
  }

  delete layerdict.pointerStates[e.pointerId];
}

function resetTransform(layerdict) {
  layerdict.transform.panx = 0;
  layerdict.transform.pany = 0;
  layerdict.transform.zoom = 1;
  redrawCanvas(layerdict);
}

function handlePointerUp(e, layerdict) {
  if (!e.hasOwnProperty("offsetX")) {
    // The polyfill doesn't set this properly
    e.offsetX = e.pageX - e.currentTarget.offsetLeft;
    e.offsetY = e.pageY - e.currentTarget.offsetTop;
  }

  e.preventDefault();
  e.stopPropagation();

  if (e.button == 2) {
    // Reset pan and zoom on right click.
    resetTransform(layerdict);
    layerdict.anotherPointerTapped = false;
    return;
  }

  // We haven't necessarily had a pointermove event since the interaction started, so make sure we update this now
  var ptr = layerdict.pointerStates[e.pointerId];
  ptr.distanceTravelled += Math.abs(e.offsetX - ptr.lastX) + Math.abs(e.offsetY - ptr.lastY);

  if (e.button == 0 && ptr.distanceTravelled < 10 && Date.now() - ptr.downTime <= 500) {
    if (Object.keys(layerdict.pointerStates).length == 1) {
      if (layerdict.anotherPointerTapped) {
        // This is the second pointer coming off of a two-finger tap
        resetTransform(layerdict);
      } else {
        // This is just a regular tap
        handleMouseClick(e, layerdict);
      }
      layerdict.anotherPointerTapped = false;
    } else {
      // This is the first finger coming off of what could become a two-finger tap
      layerdict.anotherPointerTapped = true;
    }
  } else {
    if (!settings.redrawOnDrag) {
      redrawCanvas(layerdict);
    }
    layerdict.anotherPointerTapped = false;
  }

  delete layerdict.pointerStates[e.pointerId];
}

function handlePointerMove(e, layerdict) {
  if (!layerdict.pointerStates.hasOwnProperty(e.pointerId)) {
    return;
  }
  e.preventDefault();
  e.stopPropagation();

  if (!e.hasOwnProperty("offsetX")) {
    // The polyfill doesn't set this properly
    e.offsetX = e.pageX - e.currentTarget.offsetLeft;
    e.offsetY = e.pageY - e.currentTarget.offsetTop;
  }

  var thisPtr = layerdict.pointerStates[e.pointerId];

  var dx = e.offsetX - thisPtr.lastX;
  var dy = e.offsetY - thisPtr.lastY;

  // If this number is low on pointer up, we count the action as a click
  thisPtr.distanceTravelled += Math.abs(dx) + Math.abs(dy);

  if (Object.keys(layerdict.pointerStates).length == 1) {
    // This is a simple drag
    layerdict.transform.panx += devicePixelRatio * dx / layerdict.transform.zoom;
    layerdict.transform.pany += devicePixelRatio * dy / layerdict.transform.zoom;
  } else if (Object.keys(layerdict.pointerStates).length == 2) {
    var otherPtr = Object.values(layerdict.pointerStates).filter((ptr) => ptr != thisPtr)[0];

    var oldDist = Math.sqrt(Math.pow(thisPtr.lastX - otherPtr.lastX, 2) + Math.pow(thisPtr.lastY - otherPtr.lastY, 2));
    var newDist = Math.sqrt(Math.pow(e.offsetX - otherPtr.lastX, 2)     + Math.pow(e.offsetY - otherPtr.lastY, 2));

    var scaleFactor = newDist/oldDist;

    if (scaleFactor != NaN) {
      layerdict.transform.zoom *= scaleFactor;

      var zoomd = (1 - scaleFactor) / layerdict.transform.zoom;
      layerdict.transform.panx += devicePixelRatio * otherPtr.lastX * zoomd;
      layerdict.transform.pany += devicePixelRatio * otherPtr.lastY * zoomd;
    }
  }

  thisPtr.lastX = e.offsetX;
  thisPtr.lastY = e.offsetY;

  if (settings.redrawOnDrag) {
    redrawCanvas(layerdict);
  }
}

function handleMouseWheel(e, layerdict) {
  e.preventDefault();
  e.stopPropagation();
  var t = layerdict.transform;
  var wheeldelta = e.deltaY;
  if (e.deltaMode == 1) {
    // FF only, scroll by lines
    wheeldelta *= 30;
  } else if (e.deltaMode == 2) {
    wheeldelta *= 300;
  }
  var m = Math.pow(1.1, -wheeldelta / 40);
  // Limit amount of zoom per tick.
  if (m > 2) {
    m = 2;
  } else if (m < 0.5) {
    m = 0.5;
  }
  t.zoom *= m;
  var zoomd = (1 - m) / t.zoom;
  t.panx += devicePixelRatio * e.offsetX * zoomd;
  t.pany += devicePixelRatio * e.offsetY * zoomd;
  redrawCanvas(layerdict);
}

function addMouseHandlers(div, layerdict) {
  div.addEventListener("pointerdown", function(e) {
    handlePointerDown(e, layerdict);
  });
  div.addEventListener("pointermove", function(e) {
    handlePointerMove(e, layerdict);
  });
  div.addEventListener("pointerup", function(e) {
    handlePointerUp(e, layerdict);
  });
  var pointerleave = function(e) {
    handlePointerLeave(e, layerdict);
  }
  div.addEventListener("pointercancel", pointerleave);
  div.addEventListener("pointerleave", pointerleave);
  div.addEventListener("pointerout", pointerleave);

  div.onwheel = function(e) {
    handleMouseWheel(e, layerdict);
  }
  for (var element of [div, layerdict.bg, layerdict.fab, layerdict.silk, layerdict.highlight]) {
    element.addEventListener("contextmenu", function(e) {
      e.preventDefault();
    }, false);
  }
}

function setRedrawOnDrag(value) {
  settings.redrawOnDrag = value;
  writeStorage("redrawOnDrag", value);
}

function setBoardRotation(value) {
  settings.boardRotation = value * 5;
  writeStorage("boardRotation", settings.boardRotation);
  document.getElementById("rotationDegree").textContent = settings.boardRotation;
  resizeAll();
}

function initRender() {
  allcanvas = {
    front: {
      transform: {
        x: 0,
        y: 0,
        s: 1,
        panx: 0,
        pany: 0,
        zoom: 1,
      },
      pointerStates: {},
      anotherPointerTapped: false,
      bg: document.getElementById("F_bg"),
      fab: document.getElementById("F_fab"),
      silk: document.getElementById("F_slk"),
      highlight: document.getElementById("F_hl"),
      layer: "F",
    },
    back: {
      transform: {
        x: 0,
        y: 0,
        s: 1,
        panx: 0,
        pany: 0,
        zoom: 1,
      },
      pointerStates: {},
      anotherPointerTapped: false,
      bg: document.getElementById("B_bg"),
      fab: document.getElementById("B_fab"),
      silk: document.getElementById("B_slk"),
      highlight: document.getElementById("B_hl"),
      layer: "B",
    }
  };
  addMouseHandlers(document.getElementById("frontcanvas"), allcanvas.front);
  addMouseHandlers(document.getElementById("backcanvas"), allcanvas.back);
}

///////////////////////////////////////////////

///////////////////////////////////////////////
/* DOM manipulation and misc code */

var bomsplit;
var canvassplit;
var initDone = false;
var bomSortFunction = null;
var currentSortColumn = null;
var currentSortOrder = null;
var currentHighlightedRowId;
var highlightHandlers = [];
var moduleIndexToHandler = {};
var netsToHandler = {};
var highlightedModules = [];
var highlightedNet = null;
var lastClicked;

function dbg(html) {
  dbgdiv.innerHTML = html;
}

function redrawIfInitDone() {
  if (initDone) {
    redrawCanvas(allcanvas.front);
    redrawCanvas(allcanvas.back);
  }
}

function padsVisible(value) {
  writeStorage("padsVisible", value);
  settings.renderPads = value;
  redrawIfInitDone();
}

function referencesVisible(value) {
  writeStorage("referencesVisible", value);
  settings.renderReferences = value;
  redrawIfInitDone();
}

function valuesVisible(value) {
  writeStorage("valuesVisible", value);
  settings.renderValues = value;
  redrawIfInitDone();
}

function tracksVisible(value) {
  writeStorage("tracksVisible", value);
  settings.renderTracks = value;
  redrawIfInitDone();
}

function zonesVisible(value) {
  writeStorage("zonesVisible", value);
  settings.renderZones = value;
  redrawIfInitDone();
}

function dnpOutline(value) {
  writeStorage("dnpOutline", value);
  settings.renderDnpOutline = value;
  redrawIfInitDone();
}

function setDarkMode(value) {
  if (value) {
    topmostdiv.classList.add("dark");
  } else {
    topmostdiv.classList.remove("dark");
  }
  writeStorage("darkmode", value);
  settings.darkMode = value;
  redrawIfInitDone();
}

function fabricationVisible(value) {
  writeStorage("fabricationVisible", value);
  settings.renderFabrication = value;
  redrawIfInitDone();
}

function silkscreenVisible(value) {
  writeStorage("silkscreenVisible", value);
  settings.renderSilkscreen = value;
  redrawIfInitDone();
}

function setHighlightPin1(value) {
  writeStorage("highlightpin1", value);
  settings.highlightpin1 = value;
  redrawIfInitDone();
}

function getStoredCheckboxRefs(checkbox) {
  function convert(ref) {
    var intref = parseInt(ref);
    if (isNaN(intref)) {
      for (var i = 0; i < pcbdata.modules.length; i++) {
        if (pcbdata.modules[i].ref == ref) {
          return i;
        }
      }
      return -1;
    } else {
      return intref;
    }
  }
  if (!(checkbox in settings.checkboxStoredRefs)) {
    var val = readStorage("checkbox_" + checkbox);
    settings.checkboxStoredRefs[checkbox] = val ? val : "";
  }
  if (!settings.checkboxStoredRefs[checkbox]) {
    return new Set();
  } else {
    return new Set(settings.checkboxStoredRefs[checkbox].split(",").map(r => convert(r)).filter(a => a >= 0));
  }
}

function getCheckboxState(checkbox, references) {
  var storedRefsSet = getStoredCheckboxRefs(checkbox);
  var currentRefsSet = new Set(references.map(r => r[1]));
  // Get difference of current - stored
  var difference = new Set(currentRefsSet);
  for (ref of storedRefsSet) {
    difference.delete(ref);
  }
  if (difference.size == 0) {
    // All the current refs are stored
    return "checked";
  } else if (difference.size == currentRefsSet.size) {
    // None of the current refs are stored
    return "unchecked";
  } else {
    // Some of the refs are stored
    return "indeterminate";
  }
}

function setBomCheckboxState(checkbox, element, references) {
  var state = getCheckboxState(checkbox, references);
  element.checked = (state == "checked");
  element.indeterminate = (state == "indeterminate");
}

function createCheckboxChangeHandler(checkbox, references) {
  return function() {
    refsSet = getStoredCheckboxRefs(checkbox);
    if (this.checked) {
      // checkbox ticked
      for (var ref of references) {
        refsSet.add(ref[1]);
      }
    } else {
      // checkbox unticked
      for (var ref of references) {
        refsSet.delete(ref[1]);
      }
    }
    settings.checkboxStoredRefs[checkbox] = [...refsSet].join(",");
    writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
    updateCheckboxStats(checkbox);
  }
}

function clearHighlightedModules() {
  if (currentHighlightedRowId) {
    document.getElementById(currentHighlightedRowId).classList.remove("highlighted");
    currentHighlightedRowId = null;
    highlightedModules = [];
    highlightedNet = null;
  }
}

function createRowHighlightHandler(rowid, refs, net) {
  return function() {
    if (currentHighlightedRowId) {
      if (currentHighlightedRowId == rowid) {
        return;
      }
      document.getElementById(currentHighlightedRowId).classList.remove("highlighted");
    }
    document.getElementById(rowid).classList.add("highlighted");
    currentHighlightedRowId = rowid;
    highlightedModules = refs ? refs.map(r => r[1]) : [];
    highlightedNet = net;
    drawHighlights();
  }
}

function entryMatches(entry) {
  if (settings.bommode == "netlist") {
    // entry is just a net name
    return entry.toLowerCase().indexOf(filter) >= 0;
  }
  // check refs
  for (var ref of entry[3]) {
    if (ref[0].toLowerCase().indexOf(filter) >= 0) {
      return true;
    }
  }
  // check extra fields
  for (var i in config.extra_fields) {
    if (entry[4][i].toLowerCase().indexOf(filter) >= 0) {
      return true;
    }
  }
  // check value
  if (entry[1].toLowerCase().indexOf(filter) >= 0) {
    return true;
  }
  // check footprint
  if (entry[2].toLowerCase().indexOf(filter) >= 0) {
    return true;
  }
  return false;
}

function findRefInEntry(entry) {
  return entry[3].filter(r => r[0].toLowerCase() == reflookup);
}

function highlightFilter(s) {
  if (!filter) {
    return s;
  }
  var parts = s.toLowerCase().split(filter);
  if (parts.length == 1) {
    return s;
  }
  var r = "";
  var pos = 0;
  for (var i in parts) {
    if (i > 0) {
      r += '<mark class="highlight">' +
        s.substring(pos, pos + filter.length) +
        '</mark>';
      pos += filter.length;
    }
    r += s.substring(pos, pos + parts[i].length);
    pos += parts[i].length;
  }
  return r;
}

function checkboxSetUnsetAllHandler(checkboxname) {
  return function() {
    var checkboxnum = 0;
    while (checkboxnum < settings.checkboxes.length &&
      settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
      checkboxnum++;
    }
    if (checkboxnum >= settings.checkboxes.length) {
      return;
    }
    var allset = true;
    var checkbox;
    var row;
    for (row of bombody.childNodes) {
      checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
      if (!checkbox.checked || checkbox.indeterminate) {
        allset = false;
        break;
      }
    }
    for (row of bombody.childNodes) {
      checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
      checkbox.checked = !allset;
      checkbox.indeterminate = false;
      checkbox.onchange();
    }
  }
}

function createColumnHeader(name, cls, comparator) {
  var th = document.createElement("TH");
  th.innerHTML = name;
  th.classList.add(cls);
  th.style.cursor = "pointer";
  var span = document.createElement("SPAN");
  span.classList.add("sortmark");
  span.classList.add("none");
  th.appendChild(span);
  th.onclick = function() {
    if (currentSortColumn && this !== currentSortColumn) {
      // Currently sorted by another column
      currentSortColumn.childNodes[1].classList.remove(currentSortOrder);
      currentSortColumn.childNodes[1].classList.add("none");
      currentSortColumn = null;
      currentSortOrder = null;
    }
    if (currentSortColumn && this === currentSortColumn) {
      // Already sorted by this column
      if (currentSortOrder == "asc") {
        // Sort by this column, descending order
        bomSortFunction = function(a, b) {
          return -comparator(a, b);
        }
        currentSortColumn.childNodes[1].classList.remove("asc");
        currentSortColumn.childNodes[1].classList.add("desc");
        currentSortOrder = "desc";
      } else {
        // Unsort
        bomSortFunction = null;
        currentSortColumn.childNodes[1].classList.remove("desc");
        currentSortColumn.childNodes[1].classList.add("none");
        currentSortColumn = null;
        currentSortOrder = null;
      }
    } else {
      // Sort by this column, ascending order
      bomSortFunction = comparator;
      currentSortColumn = this;
      currentSortColumn.childNodes[1].classList.remove("none");
      currentSortColumn.childNodes[1].classList.add("asc");
      currentSortOrder = "asc";
    }
    populateBomBody();
  }
  return th;
}

function populateBomHeader() {
  while (bomhead.firstChild) {
    bomhead.removeChild(bomhead.firstChild);
  }
  var tr = document.createElement("TR");
  var th = document.createElement("TH");
  th.classList.add("numCol");
  tr.appendChild(th);
  var checkboxCompareClosure = function(checkbox) {
    return (a, b) => {
      var stateA = getCheckboxState(checkbox, a[3]);
      var stateB = getCheckboxState(checkbox, b[3]);
      if (stateA > stateB) return -1;
      if (stateA < stateB) return 1;
      return 0;
    }
  }
  if (settings.bommode == "netlist") {
    th = createColumnHeader("Net name", "bom-netname", (a, b) => {
      if (a > b) return -1;
      if (a < b) return 1;
      return 0;
    });
    tr.appendChild(th);
  } else {
    for (var checkbox of settings.checkboxes) {
      th = createColumnHeader(
        checkbox, "bom-checkbox", checkboxCompareClosure(checkbox));
      th.onclick = fancyDblClickHandler(
        th, th.onclick.bind(th), checkboxSetUnsetAllHandler(checkbox));
      tr.appendChild(th);
    }
    tr.appendChild(createColumnHeader("References", "References", (a, b) => {
      var i = 0;
      while (i < a[3].length && i < b[3].length) {
        if (a[3][i] != b[3][i]) return a[3][i] > b[3][i] ? 1 : -1;
        i++;
      }
      return a[3].length - b[3].length;
    }));
    // Extra fields
    if (config.extra_fields.length > 0) {
      var extraFieldCompareClosure = function(fieldIndex) {
        return (a, b) => {
          var fa = a[4][fieldIndex];
          var fb = b[4][fieldIndex];
          if (fa != fb) return fa > fb ? 1 : -1;
          else return 0;
        }
      }
      for (var i in config.extra_fields) {
        tr.appendChild(createColumnHeader(
          config.extra_fields[i], "extra", extraFieldCompareClosure(i)));
      }
    }
    tr.appendChild(createColumnHeader("Value", "Value", (a, b) => {
      return valueCompare(a[5], b[5], a[1], b[1]);
    }));
    tr.appendChild(createColumnHeader("Footprint", "Footprint", (a, b) => {
      if (a[2] != b[2]) return a[2] > b[2] ? 1 : -1;
      else return 0;
    }));
    if (settings.bommode == "grouped") {
      tr.appendChild(createColumnHeader("Quantity", "Quantity", (a, b) => {
        return a[3].length - b[3].length;
      }));
    }
  }
  bomhead.appendChild(tr);
}

function populateBomBody() {
  while (bom.firstChild) {
    bom.removeChild(bom.firstChild);
  }
  highlightHandlers = [];
  moduleIndexToHandler = {};
  netsToHandler = {};
  currentHighlightedRowId = null;
  var first = true;
  if (settings.bommode == "netlist") {
    bomtable = pcbdata.nets.slice();
  } else {
    switch (settings.canvaslayout) {
      case 'F':
        bomtable = pcbdata.bom.F.slice();
        break;
      case 'FB':
        bomtable = pcbdata.bom.both.slice();
        break;
      case 'B':
        bomtable = pcbdata.bom.B.slice();
        break;
    }
    if (settings.bommode == "ungrouped") {
      // expand bom table
      expandedTable = []
      for (var bomentry of bomtable) {
        for (var ref of bomentry[3]) {
          expandedTable.push([1, bomentry[1], bomentry[2], [ref], bomentry[4], bomentry[5]]);
        }
      }
      bomtable = expandedTable;
    }
  }
  if (bomSortFunction) {
    bomtable = bomtable.sort(bomSortFunction);
  }
  for (var i in bomtable) {
    var bomentry = bomtable[i];
    if (filter && !entryMatches(bomentry)) {
      continue;
    }
    var references = null;
    var netname = null;
    var tr = document.createElement("TR");
    var td = document.createElement("TD");
    var rownum = +i + 1;
    tr.id = "bomrow" + rownum;
    td.textContent = rownum;
    tr.appendChild(td);
    if (settings.bommode == "netlist") {
      netname = bomentry;
      td = document.createElement("TD");
      td.innerHTML = highlightFilter(netname ? netname : "&lt;no net&gt;");
      tr.appendChild(td);
    } else {
      if (reflookup) {
        references = findRefInEntry(bomentry);
        if (references.length == 0) {
          continue;
        }
      } else {
        references = bomentry[3];
      }
      // Checkboxes
      for (var checkbox of settings.checkboxes) {
        if (checkbox) {
          td = document.createElement("TD");
          var input = document.createElement("input");
          input.type = "checkbox";
          input.onchange = createCheckboxChangeHandler(checkbox, references);
          setBomCheckboxState(checkbox, input, references);
          td.appendChild(input);
          tr.appendChild(td);
        }
      }
      // References
      td = document.createElement("TD");
      td.innerHTML = highlightFilter(references.map(r => r[0]).join(", "));
      tr.appendChild(td);
      // Extra fields
      for (var i in config.extra_fields) {
        td = document.createElement("TD");
        td.innerHTML = highlightFilter(bomentry[4][i]);
        tr.appendChild(td);
      }
      // Value
      td = document.createElement("TD");
      td.innerHTML = highlightFilter(bomentry[1]);
      tr.appendChild(td);
      // Footprint
      td = document.createElement("TD");
      td.innerHTML = highlightFilter(bomentry[2]);
      tr.appendChild(td);
      if (settings.bommode == "grouped") {
        // Quantity
        td = document.createElement("TD");
        td.textContent = bomentry[3].length;
        tr.appendChild(td);
      }
    }
    bom.appendChild(tr);
    var handler = createRowHighlightHandler(tr.id, references, netname);
    tr.onmousemove = handler;
    highlightHandlers.push({
      id: tr.id,
      handler: handler,
    });
    if (references !== null) {
      for (var refIndex of references.map(r => r[1])) {
        moduleIndexToHandler[refIndex] = handler;
      }
    }
    if (netname !== null) {
      netsToHandler[netname] = handler;
    }
    if ((filter || reflookup) && first) {
      handler();
      first = false;
    }
  }
}

function highlightPreviousRow() {
  if (!currentHighlightedRowId) {
    highlightHandlers[highlightHandlers.length - 1].handler();
  } else {
    if (highlightHandlers.length > 1 &&
      highlightHandlers[0].id == currentHighlightedRowId) {
      highlightHandlers[highlightHandlers.length - 1].handler();
    } else {
      for (var i = 0; i < highlightHandlers.length - 1; i++) {
        if (highlightHandlers[i + 1].id == currentHighlightedRowId) {
          highlightHandlers[i].handler();
          break;
        }
      }
    }
  }
  smoothScrollToRow(currentHighlightedRowId);
}

function highlightNextRow() {
  if (!currentHighlightedRowId) {
    highlightHandlers[0].handler();
  } else {
    if (highlightHandlers.length > 1 &&
      highlightHandlers[highlightHandlers.length - 1].id == currentHighlightedRowId) {
      highlightHandlers[0].handler();
    } else {
      for (var i = 1; i < highlightHandlers.length; i++) {
        if (highlightHandlers[i - 1].id == currentHighlightedRowId) {
          highlightHandlers[i].handler();
          break;
        }
      }
    }
  }
  smoothScrollToRow(currentHighlightedRowId);
}

function populateBomTable() {
  populateBomHeader();
  populateBomBody();
}

function modulesClicked(moduleIndexes) {
  var lastClickedIndex = moduleIndexes.indexOf(lastClicked);
  for (var i = 1; i <= moduleIndexes.length; i++) {
    var refIndex = moduleIndexes[(lastClickedIndex + i) % moduleIndexes.length];
    if (refIndex in moduleIndexToHandler) {
      lastClicked = refIndex;
      moduleIndexToHandler[refIndex]();
      smoothScrollToRow(currentHighlightedRowId);
      break;
    }
  }
}

function netClicked(net) {
  if (net in netsToHandler) {
    netsToHandler[net]();
    smoothScrollToRow(currentHighlightedRowId);
  } else {
    clearHighlightedModules();
    highlightedNet = net;
    drawHighlights();
  }
}

function updateFilter(input) {
  filter = input.toLowerCase();
  populateBomTable();
}

function updateRefLookup(input) {
  reflookup = input.toLowerCase();
  populateBomTable();
}

function changeCanvasLayout(layout) {
  document.getElementById("fl-btn").classList.remove("depressed");
  document.getElementById("fb-btn").classList.remove("depressed");
  document.getElementById("bl-btn").classList.remove("depressed");
  switch (layout) {
    case 'F':
      document.getElementById("fl-btn").classList.add("depressed");
      if (settings.bomlayout != "bom-only") {
        canvassplit.collapse(1);
      }
      break;
    case 'B':
      document.getElementById("bl-btn").classList.add("depressed");
      if (settings.bomlayout != "bom-only") {
        canvassplit.collapse(0);
      }
      break;
    default:
      document.getElementById("fb-btn").classList.add("depressed");
      if (settings.bomlayout != "bom-only") {
        canvassplit.setSizes([50, 50]);
      }
  }
  settings.canvaslayout = layout;
  writeStorage("canvaslayout", layout);
  resizeAll();
  changeBomMode(settings.bommode);
}

function populateMetadata() {
  document.getElementById("title").innerHTML = pcbdata.metadata.title;
  document.getElementById("revision").innerHTML = "Rev: " + pcbdata.metadata.revision;
  document.getElementById("company").innerHTML = pcbdata.metadata.company;
  document.getElementById("filedate").innerHTML = pcbdata.metadata.date;
  if (pcbdata.metadata.title != "") {
    document.title = pcbdata.metadata.title + " BOM";
  }
  var fp_f = 0, fp_b = 0, pads_f = 0, pads_b = 0, pads_th = 0;
  for (var i = 0; i < pcbdata.modules.length; i++) {
    if (pcbdata.bom.skipped.includes(i)) continue;
    var mod = pcbdata.modules[i];
    if (mod.layer == "F") {
      fp_f++;
    } else {
      fp_b++;
    }
    for (var pad of mod.pads) {
      if (pad.type == "th") {
        pads_th++;
      } else {
        if (pad.layers.includes("F")) {
          pads_f++;
        }
        if (pad.layers.includes("B")) {
          pads_b++;
        }
      }
    }
  }
  document.getElementById("stats-components-front").innerHTML = fp_f;
  document.getElementById("stats-components-back").innerHTML = fp_b;
  document.getElementById("stats-components-total").innerHTML = fp_f + fp_b;
  document.getElementById("stats-groups-front").innerHTML = pcbdata.bom.F.length;
  document.getElementById("stats-groups-back").innerHTML = pcbdata.bom.B.length;
  document.getElementById("stats-groups-total").innerHTML = pcbdata.bom.both.length;
  document.getElementById("stats-smd-pads-front").innerHTML = pads_f;
  document.getElementById("stats-smd-pads-back").innerHTML = pads_b;
  document.getElementById("stats-smd-pads-total").innerHTML = pads_f + pads_b;
  document.getElementById("stats-th-pads").innerHTML = pads_th;
}

function changeBomLayout(layout) {
  document.getElementById("bom-btn").classList.remove("depressed");
  document.getElementById("lr-btn").classList.remove("depressed");
  document.getElementById("tb-btn").classList.remove("depressed");
  switch (layout) {
    case 'bom-only':
      document.getElementById("bom-btn").classList.add("depressed");
      if (bomsplit) {
        bomsplit.destroy();
        bomsplit = null;
        canvassplit.destroy();
        canvassplit = null;
      }
      document.getElementById("frontcanvas").style.display = "none";
      document.getElementById("backcanvas").style.display = "none";
      document.getElementById("bot").style.height = "";
      break;
    case 'top-bottom':
      document.getElementById("tb-btn").classList.add("depressed");
      document.getElementById("frontcanvas").style.display = "";
      document.getElementById("backcanvas").style.display = "";
      document.getElementById("bot").style.height = "calc(100% - 80px)";
      document.getElementById("bomdiv").classList.remove("split-horizontal");
      document.getElementById("canvasdiv").classList.remove("split-horizontal");
      document.getElementById("frontcanvas").classList.add("split-horizontal");
      document.getElementById("backcanvas").classList.add("split-horizontal");
      if (bomsplit) {
        bomsplit.destroy();
        bomsplit = null;
        canvassplit.destroy();
        canvassplit = null;
      }
      bomsplit = Split(['#bomdiv', '#canvasdiv'], {
        sizes: [50, 50],
        onDragEnd: resizeAll,
        direction: "vertical",
        gutterSize: 5
      });
      canvassplit = Split(['#frontcanvas', '#backcanvas'], {
        sizes: [50, 50],
        gutterSize: 5,
        onDragEnd: resizeAll
      });
      break;
    case 'left-right':
      document.getElementById("lr-btn").classList.add("depressed");
      document.getElementById("frontcanvas").style.display = "";
      document.getElementById("backcanvas").style.display = "";
      document.getElementById("bot").style.height = "calc(100% - 80px)";
      document.getElementById("bomdiv").classList.add("split-horizontal");
      document.getElementById("canvasdiv").classList.add("split-horizontal");
      document.getElementById("frontcanvas").classList.remove("split-horizontal");
      document.getElementById("backcanvas").classList.remove("split-horizontal");
      if (bomsplit) {
        bomsplit.destroy();
        bomsplit = null;
        canvassplit.destroy();
        canvassplit = null;
      }
      bomsplit = Split(['#bomdiv', '#canvasdiv'], {
        sizes: [50, 50],
        onDragEnd: resizeAll,
        gutterSize: 5
      });
      canvassplit = Split(['#frontcanvas', '#backcanvas'], {
        sizes: [50, 50],
        gutterSize: 5,
        direction: "vertical",
        onDragEnd: resizeAll
      });
  }
  settings.bomlayout = layout;
  writeStorage("bomlayout", layout);
  changeCanvasLayout(settings.canvaslayout);
}

function changeBomMode(mode) {
  document.getElementById("bom-grouped-btn").classList.remove("depressed");
  document.getElementById("bom-ungrouped-btn").classList.remove("depressed");
  document.getElementById("bom-netlist-btn").classList.remove("depressed");
  switch (mode) {
    case 'grouped':
      document.getElementById("bom-grouped-btn").classList.add("depressed");
      break;
    case 'ungrouped':
      document.getElementById("bom-ungrouped-btn").classList.add("depressed");
      break;
    case 'netlist':
      document.getElementById("bom-netlist-btn").classList.add("depressed");
  }
  writeStorage("bommode", mode);
  if (mode != settings.bommode) {
    settings.bommode = mode;
    bomSortFunction = null;
    currentSortColumn = null;
    currentSortOrder = null;
    clearHighlightedModules();
  }
  populateBomTable();
}

function focusFilterField() {
  focusInputField(document.getElementById("filter"));
}

function focusRefLookupField() {
  focusInputField(document.getElementById("reflookup"));
}

function toggleBomCheckbox(bomrowid, checkboxnum) {
  if (!bomrowid || checkboxnum > settings.checkboxes.length) {
    return;
  }
  var bomrow = document.getElementById(bomrowid);
  var checkbox = bomrow.childNodes[checkboxnum].childNodes[0];
  checkbox.checked = !checkbox.checked;
  checkbox.indeterminate = false;
  checkbox.onchange();
}

function checkBomCheckbox(bomrowid, checkboxname) {
  var checkboxnum = 0;
  while (checkboxnum < settings.checkboxes.length &&
    settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
    checkboxnum++;
  }
  if (!bomrowid || checkboxnum >= settings.checkboxes.length) {
    return;
  }
  var bomrow = document.getElementById(bomrowid);
  var checkbox = bomrow.childNodes[checkboxnum + 1].childNodes[0];
  checkbox.checked = true;
  checkbox.indeterminate = false;
  checkbox.onchange();
}

function setBomCheckboxes(value) {
  writeStorage("bomCheckboxes", value);
  settings.checkboxes = value.split(",").filter((e) => e);
  prepCheckboxes();
  populateBomTable();
}

function prepCheckboxes() {
  var table = document.getElementById("checkbox-stats");
  while (table.childElementCount > 1) {
    table.removeChild(table.lastChild);
  }
  if (settings.checkboxes.length) {
    table.style.display = "";
  } else {
    table.style.display = "none";
  }
  for (var checkbox of settings.checkboxes) {
    var tr = document.createElement("TR");
    var td = document.createElement("TD");
    td.innerHTML = checkbox;
    tr.appendChild(td);
    td = document.createElement("TD");
    td.id = "checkbox-stats-" + checkbox;
    var progressbar = document.createElement("div");
    progressbar.classList.add("bar");
    td.appendChild(progressbar);
    var text = document.createElement("div");
    text.classList.add("text");
    td.appendChild(text);
    tr.appendChild(td);
    table.appendChild(tr);
    updateCheckboxStats(checkbox);
  }
}

function updateCheckboxStats(checkbox) {
  var checked = getStoredCheckboxRefs(checkbox).size;
  var total = pcbdata.modules.length - pcbdata.bom.skipped.length;
  var percent = checked * 100.0 / total;
  var td = document.getElementById("checkbox-stats-" + checkbox);
  td.firstChild.style.width = percent + "%";
  td.lastChild.innerHTML = checked + "/" + total + " (" + Math.round(percent) + "%)";
}

document.onkeydown = function(e) {
  switch (e.key) {
    case "n":
      if (document.activeElement.type == "text") {
        return;
      }
      if (currentHighlightedRowId !== null) {
        checkBomCheckbox(currentHighlightedRowId, "placed");
        highlightNextRow();
        e.preventDefault();
      }
      break;
    case "ArrowUp":
      highlightPreviousRow();
      e.preventDefault();
      break;
    case "ArrowDown":
      highlightNextRow();
      e.preventDefault();
      break;
    default:
      break;
  }
  if (e.altKey) {
    switch (e.key) {
      case "f":
        focusFilterField();
        e.preventDefault();
        break;
      case "r":
        focusRefLookupField();
        e.preventDefault();
        break;
      case "z":
        changeBomLayout("bom-only");
        e.preventDefault();
        break;
      case "x":
        changeBomLayout("left-right");
        e.preventDefault();
        break;
      case "c":
        changeBomLayout("top-bottom");
        e.preventDefault();
        break;
      case "v":
        changeCanvasLayout("F");
        e.preventDefault();
        break;
      case "b":
        changeCanvasLayout("FB");
        e.preventDefault();
        break;
      case "n":
        changeCanvasLayout("B");
        e.preventDefault();
        break;
      default:
        break;
    }
    if (e.key >= '1' && e.key <= '9') {
      toggleBomCheckbox(currentHighlightedRowId, parseInt(e.key));
    }
  }
}

function hideNetlistButton() {
  document.getElementById("bom-ungrouped-btn").classList.remove("middle-button");
  document.getElementById("bom-ungrouped-btn").classList.add("right-most-button");
  document.getElementById("bom-netlist-btn").style.display = "none";
}

window.onload = function(e) {
  initUtils();
  initRender();
  initStorage();
  initDefaults();
  cleanGutters();
  populateMetadata();
  dbgdiv = document.getElementById("dbg");
  bom = document.getElementById("bombody");
  bomhead = document.getElementById("bomhead");
  filter = "";
  reflookup = "";
  if (!("nets" in pcbdata)) {
    hideNetlistButton();
  }
  initDone = true;
  prepCheckboxes();
  // Triggers render
  changeBomLayout(settings.bomlayout);
}

window.onresize = resizeAll;
window.matchMedia("print").addListener(resizeAll);

///////////////////////////////////////////////

  </script>
</head>

<body>
<div id="topmostdiv" class="topmostdiv">
  <div id="top">
    <div style="float: right; height: 100%;">
      <div class="hideonprint menu" style="float: right; top: 8px;">
        <button class="menubtn"></button>
        <div class="menu-content">
          <label class="menu-label menu-label-top">
            <input id="darkmodeCheckbox" type="checkbox" onchange="setDarkMode(this.checked)">
            Dark mode
          </label>
          <label class="menu-label">
            <input id="padsCheckbox" type="checkbox" checked onchange="padsVisible(this.checked)">
            Show footprint pads
          </label>
          <label class="menu-label" style="width: calc(50% - 18px)">
            <input id="fabricationCheckbox" type="checkbox" checked onchange="fabricationVisible(this.checked)">
            Fab layer
          </label><!-- This comment eats space! All of it!
          --><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
            <input id="silkscreenCheckbox" type="checkbox" checked onchange="silkscreenVisible(this.checked)">
            Silkscreen
          </label>
          <label class="menu-label" style="width: calc(50% - 18px)">
            <input id="referencesCheckbox" type="checkbox" checked onchange="referencesVisible(this.checked)">
            References
          </label><!-- This comment eats space! All of it!
          --><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
            <input id="valuesCheckbox" type="checkbox" checked onchange="valuesVisible(this.checked)">
            Values
          </label>
          <div id="tracksAndZonesCheckboxes">
            <label class="menu-label" style="width: calc(50% - 18px)">
              <input id="tracksCheckbox" type="checkbox" checked onchange="tracksVisible(this.checked)">
              Tracks
            </label><!-- This comment eats space! All of it!
            --><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
              <input id="zonesCheckbox" type="checkbox" checked onchange="zonesVisible(this.checked)">
              Zones
            </label>
          </div>
          <label class="menu-label">
            <input id="dnpOutlineCheckbox" type="checkbox" checked onchange="dnpOutline(this.checked)">
            DNP components outlined
          </label>
          <label class="menu-label">
            <input id="highlightpin1Checkbox" type="checkbox" onchange="setHighlightPin1(this.checked)">
            Highlight first pin
          </label>
          <label class="menu-label">
            <input id="dragCheckbox" type="checkbox" checked onchange="setRedrawOnDrag(this.checked)">
            Continuous redraw on drag
          </label>
          <label class="menu-label">
            <span>Board rotation</span>
            <span style="float: right"><span id="rotationDegree">0</span>&#176;</span>
            <input id="boardRotation" type="range" min="-36" max="36" value="0" class="slider" oninput="setBoardRotation(this.value)">
          </label>
          <label class="menu-label">
            <div style="margin-left: 5px">Bom checkboxes</div>
            <input id="bomCheckboxes" class="menu-textbox" type=text
                   oninput="setBomCheckboxes(this.value)">
          </label>
          <label class="menu-label">
            <span class="shameless-plug">
              <span>Created using</span>
              <a target="blank" href="https://github.com/openscopeproject/InteractiveHtmlBom">InteractiveHtmlBom</a>
            </span>
          </label>
        </div>
      </div>
      <div class="button-container hideonprint"
           style="float: right; position: relative; top: 8px">
        <button id="fl-btn" class="left-most-button" onclick="changeCanvasLayout('F')"
                title="Front only">F
        </button>
        <button id="fb-btn" class="middle-button" onclick="changeCanvasLayout('FB')"
                title="Front and Back">FB
        </button>
        <button id="bl-btn" class="right-most-button" onclick="changeCanvasLayout('B')"
                title="Back only">B
        </button>
      </div>
      <div class="button-container hideonprint"
           style="float: right; position: relative; top: 8px">
        <button id="bom-btn" class="left-most-button" onclick="changeBomLayout('bom-only')"
                title="BOM only"></button>
        <button id="lr-btn" class="middle-button" onclick="changeBomLayout('left-right')"
                title="BOM left, drawings right"></button>
        <button id="tb-btn" class="right-most-button" onclick="changeBomLayout('top-bottom')"
                title="BOM top, drawings bot"></button>
      </div>
      <div class="button-container hideonprint"
           style="float: right; position: relative; top: 8px">
        <button id="bom-grouped-btn" class="left-most-button" onclick="changeBomMode('grouped')"
                title="Grouped BOM"></button>
        <button id="bom-ungrouped-btn" class="middle-button" onclick="changeBomMode('ungrouped')"
                title="Ungrouped BOM"></button>
        <button id="bom-netlist-btn" class="right-most-button" onclick="changeBomMode('netlist')"
                title="Netlist"></button>
      </div>
      <div class="hideonprint menu" style="float: right; top: 8px;">
        <button class="statsbtn"></button>
        <div class="menu-content">
          <table class="stats">
            <tbody>
              <tr>
                <td width="40%">Board stats</td>
                <td>Front</td>
                <td>Back</td>
                <td>Total</td>
              </tr>
              <tr>
                <td>Components</td>
                <td id="stats-components-front">~</td>
                <td id="stats-components-back">~</td>
                <td id="stats-components-total">~</td>
              </tr>
              <tr>
                <td>Groups</td>
                <td id="stats-groups-front">~</td>
                <td id="stats-groups-back">~</td>
                <td id="stats-groups-total">~</td>
              </tr>
              <tr>
                <td>SMD pads</td>
                <td id="stats-smd-pads-front">~</td>
                <td id="stats-smd-pads-back">~</td>
                <td id="stats-smd-pads-total">~</td>
              </tr>
              <tr>
                <td>TH pads</td>
                <td colspan=3 id="stats-th-pads">~</td>
              </tr>
            </tbody>
          </table>
          <table class="stats">
            <col width="40%"/><col />
            <tbody id="checkbox-stats">
              <tr>
                <td colspan=2 style="border-top: 0">Checkboxes</td>
              </tr>
            </tbody>
          </table>
        </div>
      </div>
      <div class="hideonprint menu" style="float: right; top: 8px;">
        <button class="iobtn"></button>
        <div class="menu-content">
          <div class="menu-label menu-label-top">
            <div style="margin-left: 5px;">Save board image</div>
            <div class="flexbox">
              <input id="render-save-width" class="menu-textbox" type="text" value="1000" placeholder="Width"
                  style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)">
              <span>X</span>
              <input id="render-save-height" class="menu-textbox" type="text" value="1000" placeholder="Height"
                  style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)">
            </div>
            <label>
              <input id="render-save-transparent" type="checkbox">
              Transparent background
            </label>
            <div class="flexbox">
              <button class="savebtn" onclick="saveImage('F')">Front</button>
              <button class="savebtn" onclick="saveImage('B')">Back</button>
            </div>
          </div>
          <div class="menu-label">
            <span style="margin-left: 5px;">Config and checkbox state</span>
            <div class="flexbox">
              <button class="savebtn" onclick="saveSettings()">Export</button>
              <button class="savebtn" onclick="loadSettings()">Import</button>
            </div>
          </div>
        </div>
      </div>
    </div>
    <div id="fileinfodiv" style="overflow: auto;">
      <table class="fileinfo">
        <tbody>
          <tr>
            <td id="title" class="title" style="width: 70%">
              Title
            </td>
            <td id="revision" class="title" style="width: 30%">
              Revision
            </td>
          </tr>
          <tr>
            <td id="company">
              Company
            </td>
            <td id="filedate">
              Date
            </td>
          </tr>
        </tbody>
      </table>
    </div>
  </div>
  <div id="bot" class="split" style="height: calc(100% - 80px)">
    <div id="bomdiv" class="split split-horizontal">
      <div style="width: 100%">
        <input id="reflookup" class="textbox searchbox reflookup hideonprint" type="text" placeholder="Ref lookup"
               oninput="updateRefLookup(this.value)">
        <input id="filter" class="textbox searchbox filter hideonprint" type="text" placeholder="Filter"
               oninput="updateFilter(this.value)">
        <div class="button-container hideonprint" style="float: left; margin: 0;">
          <button id="copy" title="Copy bom table to clipboard"
               onclick="copyToClipboard()"></button>
        </div>
      </div>
      <div id="dbg"></div>
      <table class="bom">
        <thead id="bomhead">
        </thead>
        <tbody id="bombody">
        </tbody>
      </table>
    </div>
    <div id="canvasdiv" class="split split-horizontal">
      <div id="frontcanvas" class="split" touch-action="none" style="overflow: hidden">
        <div style="position: relative; width: 100%; height: 100%;">
          <canvas id="F_bg" style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
          <canvas id="F_fab" style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
          <canvas id="F_slk" style="position: absolute; left: 0; top: 0; z-index: 2;"></canvas>
          <canvas id="F_hl" style="position: absolute; left: 0; top: 0; z-index: 3;"></canvas>
        </div>
      </div>
      <div id="backcanvas" class="split" touch-action="none" style="overflow: hidden">
        <div style="position: relative; width: 100%; height: 100%;">
          <canvas id="B_bg" style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
          <canvas id="B_fab" style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
          <canvas id="B_slk" style="position: absolute; left: 0; top: 0; z-index: 2;"></canvas>
          <canvas id="B_hl" style="position: absolute; left: 0; top: 0; z-index: 3;"></canvas>
        </div>
      </div>
    </div>
  </div>
</div>
</body>

</html>
